OllyDbg 使用笔记 (十五)

参考

书:《加密与解密》

视频:小甲鱼 解密系列 视频

示例程序下载地址:http://pan.baidu.com/s/1i3rCVmH

exescope下载地址:http://pan.baidu.com/s/1eQqxha6

通过对话框的hinstance 破解

win32中对话框分模态对话框与非模态对话框,

模态对话框用

int DialogBoxParam(HINSTANCE hInstance,LPCTSTR IpTemplateName,HWND hWndParent, DLGPROC IPDialogFunc,LPARAM dwlnitParam);来创建。

非模态对话框用

HWND CreateDialogParam(HINSTANCE hlnstancem,LPCTSTR IpTemplateName,HWND hWndParent,DLGPROCIpDialogFunc, LPARAM dwlniParam);来创建

我们可以通过搜索创建对话框函数要传入的hInstance参数来破解,即搜索 push hInstance。

此程序,运行结束后会差生nag窗口,既然nag窗口是对话框肯定有他的hinstance,通过exescope查看nag窗口的hinstance

图片1:

nag窗口

图片2

exescope查找到nag窗口的hinstance

可以知道nag窗口的hinstance是103(10进制),16进制就是0x67

用OD加载程序,右键-->查找-->所有命令 搜索push 0x67,

可以搜索到一处push 0x67,可以发现此处的代码正是调用nag窗口的代码

图片2

但是观察前后代码没有发现 有关跳转的代码。我们需要查看调用此处的代码。

查找调用此处的代码的方法有多种

方法一:

因为call xxx 肯定会保存当前的代码的地址,所以,只需运行到断点处,观察堆栈窗口即可。

按F9运行,再关闭程序的窗口,即可到此处。

查看堆栈窗口:

图片3

可以发现绿色框框中即是

绿色方框内即是 调用此处代码的call的后一个命令的地址。

选中它,选中 右键-->反汇编窗口中跟随,即可来到调用此处代码的call。

方法二:

观察push 0x67 前面的代码,找到这个函数函数头(关键找nop 和 push ebp)

图片4

选中函开始的代码 push ebp,右键--> 查找参考-->选中命令,即可看到调用这个函数的call。

找到的call

图片5

观察前后代码,可以发现 jnz     short 004023F6 很关键,它可以跳过  call    00401220。在看看jnz     short 004023F6前面的代码

call    00403E18也非常大关键,00403E18函数有能就是判断是否注册的代码,进入00403E18,查看代码

图片6

把mov     eax, dword ptr [ebp-4]  跟 mov     eax, dword ptr [eax+2C] 改成mov eax,1 ,保存到程序。重新运行改后的程序,可以发现已经被破解。

时间: 2024-07-28 14:50:00

OllyDbg 使用笔记 (十五)的相关文章

Swift 学习笔记十五:扩展

扩展就是向一个已有的类.结构体或枚举类型添加新功能(functionality).扩展和 Objective-C 中的分类(categories)类似.(不过与Objective-C不同的是,Swift 的扩展没有名字.) Swift 中的扩展可以: 1.添加计算型属性和计算静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.使一个已有类型符合某个协议 一.扩展属性,构造器,方法 class Human{ var name:String? va

laravel3学习笔记(十五)

原作者博客:ieqi.net ==================================================================================================== 异常与日志 在应用中,我们总会遇到各种问题.各种异常,这时,记录异常发生时的状态就很重要,所以异常与日志是有着天然的关系的. 关于异常与日志的配置在文件 application/config/error.php 中. 文件中有四个配置项: 'ignore' => ar

西门子PLC学习笔记十五-(数据块及数据访问方式)

一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的. 数据块分共享数据块.背景数据块.用户自定义数据块,下面分别介绍. 1.共享数据块(全局数据块) 其用于存储全局数据,所有逻辑块(OB.FC.FB)都可以访问共享数据块中的数据. 2.背景数据块(私有存储区) 其用做功能块(FB)的"存储器".FB的参数和静态变量安排在它的背景数据块中.

【慕课网实战】Spark Streaming实时流处理项目实战笔记十五之铭文升级版

铭文一级:[木有笔记] 铭文二级: 第12章 Spark Streaming项目实战 行为日志分析: 1.访问量的统计 2.网站黏性 3.推荐 Python实时产生数据 访问URL->IP信息->referer和状态码->日志访问时间->写入到文件中 本地与虚拟机都要装了python才能运行 重要代码: #coding=UTF-8 #数组最后一个没有"," url_paths = [ "class/128.html", "class

C++笔记十五:C++对C的扩展——三目运算符功能增强

三目运算符在C编译器中的表现: int main() { int a=10; int b=20; //三目运算符是一个表达式,表达式不能做左值 (a<b?a:b)=30; printf("a=%d,b=%d",a,b); return 0; } 运行程序我们发现编译失败! 看原因我们看到是表达式不能做左值. 这句话怎么理解呢? C语言中,表达式的返回值是一个数,表达式的运算结果放在了CPU的寄存器里面,而不是内存中,不是一个内存地址(后面查笔记有关C和C++的左值.右值). 也就

《Inside C#》笔记(十五) 非托管代码 上

为了保证向后兼容性,C#和.NET可以通过非托管的方式运行旧代码.非托管代码是指没有被.NET运行时管控的代码.非托管代码主要包括:平台调用服务(PlatformInvocation Services).不安全代码(Unsafe Code).COM互操作(COM interoperability).   一 平台调用服务 平台调用服务(Platform Invocation Services)也被称作PInvoke,可以使用非托管DLL中的方法.结构甚至是给其传递回调函数.在使用非托管DLL前需

yii2源码学习笔记(十五)

这几天有点忙今天好些了,继续上次的module来吧 1 /** 2 * Returns the directory that contains the controller classes according to [[controllerNamespace]]. 3 *根据控制器的命名空间返回控制器的目录路径 4 * Note that in order for this method to return a value, you must define 5 * an alias for th

python学习笔记十五 web框架

python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自己处理请求 基于wsgi(Web Server Gateway Interface WEB服务网关接口,实现socket功能),自己处理请求 如图示: 自己写的web框架 #!/usr/bin/env python #coding:utf-8 import socket def handle_req

PHP学习笔记十五【面向对象二】

<?php class Cat{ //public 访问修饰符 public $name; public $age; } //创建 $cat1=new Cat; $cat1->name="小白"; //访问某个对象的某个属性 $对象名->属性名 echo $cat1->name; echo "<br/>"; class Person { public $name; public $age; } $a=new Person(); $

学习笔记 十五: mariadb

一 mariadb简介 二 安装配置 三 案例