OllyDbg 使用笔记 (二)
来源:互联网 发布:淘宝美版三星s7能买吗 编辑:程序博客网 时间:2024/05/30 23:13
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,会先弹出窗口。随意写入用户名和序列号,按Check。之后就会运行到断点处。
接着一边按F8,一边观察下面的信息面板的提示信息,直到发现前面填的用户名和序列号。
图片4
004011D7 . 8D5424 4C lea edx, dword ptr [esp+4C]004011DB . 53 push ebx004011DC . 8D8424 A00000>lea eax, dword ptr [esp+A0]004011E3 . 52 push edx004011E4 . 50 push eax004011E5 . E8 56010000 call 00401340004011EA . 8B3D BC404000 mov edi, dword ptr [<&USER32.GetDlg>; USER32.GetDlgItem004011F0 . 83C4 0C add esp, 0C004011F3 . 85C0 test eax, eax004011F5 . 74 37 je short 0040122E
观察此时的代码,call 00401340 前面有3个PUSH,是00401340这个函数的参数,分别是用户名,序列号和序列号长度。还有下面的test eax,eax 值得注意,函数的返回值都是储存在eax中的。
可以从上面得出call 00401340 就是判断输入的用户名和序列号是否正确的函数。
暴力破解
接着按F8接着运行,运行到 je short 0040122E 处停下。
但我们输入的是错误的时候,我们可以发现这个地方 je 是跳转的,我们可以通过在右边修改标志寄存器(点击Z 后面的1)让je不跳转 或者直接把 je short 0040122E改成 nop(选中,按下空格键输入nop),进行暴力破解。
图片5
图片6
然后运行就可以看到“恭喜你成功”
获取正确序列号
运行到
004011E5 . E8 56010000 call 00401340
后按F7进入函数,可以看到下面的代码
00401340 /$ 55 push ebp00401341 |. 8B6C24 0C mov ebp, dword ptr [esp+C]00401345 |. 56 push esi00401346 |. 57 push edi00401347 |. 8B7C24 18 mov edi, dword ptr [esp+18]0040134B |. B9 03000000 mov ecx, 300401350 |. 33F6 xor esi, esi00401352 |. 33C0 xor eax, eax00401354 |. 3BF9 cmp edi, ecx00401356 |. 7E 21 jle short 0040137900401358 |. 53 push ebx00401359 |> 83F8 07 /cmp eax, 70040135C |. 7E 02 |jle short 004013600040135E |. 33C0 |xor eax, eax00401360 |> 33D2 |xor edx, edx00401362 |. 33DB |xor ebx, ebx00401364 |. 8A1429 |mov dl, byte ptr [ecx+ebp]00401367 |. 8A98 30504000 |mov bl, byte ptr [eax+405030]0040136D |. 0FAFD3 |imul edx, ebx00401370 |. 03F2 |add esi, edx00401372 |. 41 |inc ecx00401373 |. 40 |inc eax00401374 |. 3BCF |cmp ecx, edi00401376 |.^ 7C E1 \jl short 0040135900401378 |. 5B pop ebx00401379 |> 56 push esi ; /<%ld>0040137A |. 68 78504000 push 00405078 ; |Format = "%ld"0040137F |. 55 push ebp ; |s00401380 |. FF15 9C404000 call dword ptr [<&USER32.wsprintfA>; \wsprintfA00401386 |. 8B4424 1C mov eax, dword ptr [esp+1C]0040138A |. 83C4 0C add esp, 0C0040138D |. 55 push ebp ; /String20040138E |. 50 push eax ; |String10040138F |. FF15 04404000 call dword ptr [<&KERNEL32.lstrcmp>; \lstrcmpA00401395 |. F7D8 neg eax00401397 |. 1BC0 sbb eax, eax00401399 |. 5F pop edi0040139A |. 5E pop esi0040139B |. 40 inc eax0040139C |. 5D pop ebp0040139D \. C3 retn
我们可以发现call dword ptr [<&KERNEL32.lstrcmp>; lstrcmp指令,说明前面的两参数一定是用来比较的,一个是自己写的错误序列号,一个是这个函数计算出来的正确的序列号。
按F8运行到call dword ptr [<&KERNEL32.lstrcmp>; 处,我们可以发现ebp存放的是“6854”字符串的地址,eax就是我们写的字符串“12345678”的地址(输入的用户名为billvsme,序列号为12345678)。从而我们就可以只到用户名“billvsme”的序列号为6854。
- OllyDbg 使用笔记 (二)
- OllyDbg 使用笔记 (一)
- OllyDbg 使用笔记 (三)
- OllyDbg 使用笔记 (四)
- OllyDbg 使用笔记 (五)
- OllyDbg 使用笔记 (六)
- OllyDbg 使用笔记 (七)
- OllyDbg 使用笔记 (八)
- OllyDbg 使用笔记 (九)
- OllyDbg 使用笔记 (十)
- OllyDbg 使用笔记 (十一)
- OllyDbg 使用笔记 (十二)
- OllyDbg 使用笔记 (十三)
- OllyDbg 使用笔记 (十四)
- OllyDbg 使用笔记 (十五)
- OllyDbg 使用笔记 (十六)
- OllyDbg 使用笔记 (十七)
- OllyDbg 使用笔记 (十八)
- iOS_16_控制器切换_modal_代码方式
- MSP430基础时钟模块学习
- iOS学习之sqlite的创建数据库,表,插入查看数据
- Spring 发送带模板的邮件
- MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决
- OllyDbg 使用笔记 (二)
- 反向投影(有助于理解camshift)
- poj 3046
- DB2联邦
- 机器学习 常见分类方法
- C进阶指南(1):整型溢出和类型提升、内存申请和管理
- c语言错误
- 平方剩余
- Eclipse插件开发:实现控制台输出信息