OllyDbg 使用笔记 (二)

參考

书:《加密与解密》

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

TraceMe.exe下载地址:http://pan.baidu.com/s/1c0s2twO

TraceMe.exe 程序破解

程序见下图。破解目标:使我们可以验证成功。

图片1

因为输入肯定会用到获取对话框文本的API。所以在反汇编面板 按Ctrl+G搜索GetDlgItemTextA,试试看。

图片2

也能够按Ctrl+N 打开程序的导入表。

查看程序导入了那些函数,选中GetDlgItemTextA,右键 选择在反汇编窗体中尾随输入函数。

图片3

能够看到搜索到了对应的API函数。

按F2下断点。再按Ctrl+F2 又一次加载。再按F9,会先弹出窗体。任意写入username和序列号,按Check。之后就会执行到断点处。

接着一边按F8,一边观察以下的信息面板的提示信息,直到发现前面填的username和序列号。

图片4

004011D7             .  8D5424 4C     lea     edx, dword ptr [esp+4C]
004011DB . 53 push ebx
004011DC . 8D8424 A00000>lea eax, dword ptr [esp+A0]
004011E3 . 52 push edx
004011E4 . 50 push eax
004011E5 . E8 56010000 call 00401340
004011EA . 8B3D BC404000 mov edi, dword ptr [<&USER32.GetDlg>; USER32.GetDlgItem
004011F0 . 83C4 0C add esp, 0C
004011F3 . 85C0 test eax, eax
004011F5 . 74 37 je short 0040122E

观察此时的代码,call 00401340 前面有3个PUSH,是00401340这个函数的參数,各自是username,序列号和序列号长度。

还有以下的test eax,eax 值得注意,函数的返回值都是储存在eax中的。

能够从上面得出call 00401340 就是推断输入的username和序列号是否正确的函数。

暴力破解

接着按F8接着执行。执行到  je    short 0040122E  处停下。

但我们输入的是错误的时候,我们能够发现这个地方 je 是跳转的,我们能够通过在右边改动标志寄存器(点击Z 后面的1)让je不跳转
或者直接把 je    short 0040122E改成 nop(选中,按下空格键输入nop),进行暴力破解。

图片5

图片6

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmlsbHZzbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

然后执行就能够看到“恭喜你成功”

获取正确序列号

执行到

004011E5
        .  E8 56010000   call    00401340

后按F7进入函数,能够看到以下的代码

00401340        /$  55            push    ebp
00401341 |. 8B6C24 0C mov ebp, dword ptr [esp+C]
00401345 |. 56 push esi
00401346 |. 57 push edi
00401347 |. 8B7C24 18 mov edi, dword ptr [esp+18]
0040134B |. B9 03000000 mov ecx, 3
00401350 |. 33F6 xor esi, esi
00401352 |. 33C0 xor eax, eax
00401354 |. 3BF9 cmp edi, ecx
00401356 |. 7E 21 jle short 00401379
00401358 |. 53 push ebx
00401359 |> 83F8 07 /cmp eax, 7
0040135C |. 7E 02 |jle short 00401360
0040135E |. 33C0 |xor eax, eax
00401360 |> 33D2 |xor edx, edx
00401362 |. 33DB |xor ebx, ebx
00401364 |. 8A1429 |mov dl, byte ptr [ecx+ebp]
00401367 |. 8A98 30504000 |mov bl, byte ptr [eax+405030]
0040136D |. 0FAFD3 |imul edx, ebx
00401370 |. 03F2 |add esi, edx
00401372 |. 41 |inc ecx
00401373 |. 40 |inc eax
00401374 |. 3BCF |cmp ecx, edi
00401376 |.^ 7C E1 \jl short 00401359
00401378 |. 5B pop ebx
00401379 |> 56 push esi ; /<%ld>
0040137A |. 68 78504000 push 00405078 ; |Format = "%ld"
0040137F |. 55 push ebp ; |s
00401380 |. FF15 9C404000 call dword ptr [<&USER32.wsprintfA>; \wsprintfA
00401386 |. 8B4424 1C mov eax, dword ptr [esp+1C]
0040138A |. 83C4 0C add esp, 0C
0040138D |. 55 push ebp ; /String2
0040138E |. 50 push eax ; |String1
0040138F |. FF15 04404000 call dword ptr [<&KERNEL32.lstrcmp>; \lstrcmpA
00401395 |. F7D8 neg eax
00401397 |. 1BC0 sbb eax, eax
00401399 |. 5F pop edi
0040139A |. 5E pop esi
0040139B |. 40 inc eax
0040139C |. 5D pop ebp
0040139D \. C3 retn

我们能够发现call    dword ptr [<&KERNEL32.lstrcmp>; lstrcmp指令。说明前面的两參数一定是用来比較的,一个是自己写的错误序列号,一个是这个函数计算出来的正确的序列号。

按F8执行到call    dword ptr [<&KERNEL32.lstrcmp>; 处。我们能够发现ebp存放的是“6854”字符串的地址。eax就是我们写的字符串“12345678”的地址(输入的username为billvsme,序列号为12345678)。

从而我们就能够仅仅到username“billvsme”的序列号为6854。

OllyDbg 使用笔记 (二)的更多相关文章

  1. OllyDbg 使用笔记 (十二)

    OllyDbg 使用笔记 (十二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1eQiV6aI 安装好程序 ...

  2. OllyDbg 使用笔记 (一)

    OllyDbg 使用笔记 (一) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 ollydbg下载地址:http://tools.pediy.com/debuggers.htm ...

  3. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  4. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  5. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  6. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  9. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. loadrunner 脚本和replaylog中的中文乱码问题(转载)

    解决这个问题必须认识到一个事实就是,loadrunner和测试服务器交换数据使用的是utf8格式,但是展现在replaylog中是使用gb2312格式,而且在脚本中如何使用web_reg_find的时 ...

  2. nginx server_参数配置总结(转)

    转:http://onlyzq.blog.51cto.com/1228/535279 Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹 ...

  3. http://blog.csdn.net/bluejoe2000/article/details/39521405#t9

    http://blog.csdn.net/bluejoe2000/article/details/39521405#t9

  4. MongoDB实战指南(三):MongoDB的锁机制

    与关系数据库一样,MongoDB也是通过锁机制来保证数据的完整性和一致性,MongoDB利用读写锁来支持并发操作,读锁可以共享写锁具有排他性.当一个读锁存在时,其他读操作也可以用这个读锁:但当一个写锁 ...

  5. [jobdu]数组中的逆序对

    http://ac.jobdu.com/problem.php?pid=1348 数组中的逆序对也是个常见的题目,算法导论中也有一些描述,参考:http://www.cnblogs.com/wuyue ...

  6. thinkphp 模板替换

    具体详见tp手册. 如果需要修改模板替换映射路径. 则需: 'TMPL_PARSE_STRING'=>array( '__PUBLIC__'=>__ROOT__.'/'.APP_NAME. ...

  7. 第二章 LM3S USB处理器

    2.1 LM3S处理器简介 Luminary Micr公司Stellaris所提供一系列的微控制器是首款基于Cortex-m3的控制器,它们为对成本尤其敏感的嵌入式微控制器应用方案带来了高性能的32位 ...

  8. delphi中formatFloat代码初探(在qt下实现floatformat的函数)

    由于项目需要,需要在qt下实现floatformat的函数.之前写过一个,但是写得不好.决定重新写一个,参考delphi xe2下的实现.把xe2下的相关代码都看了一遍,xe2的代码思路在这里贴出来. ...

  9. Little-endian的一个好处:在变量指针转换的时候地址保持不变

    Big-endian 的内存顺序和数字的书写顺序是一致的,方便阅读理解.Little-endian 在变量指针转换的时候地址保持不变,比如 int64* 转到 int32* 各有利弊,统一就好,目前看 ...

  10. RPGJS 进阶分析之 如何使用RMXP导出的数据

    首先启动RMXP 在主脚本编辑区粘贴官方提供的导出数据脚本. 之后启动并进入游戏之后按F8键就可以调出导出Map和Animation的菜单 导出后的数据保存在工程目录下的RpgJs目录下. Datab ...