吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1733|回复: 1
收起左侧

[讨论] The041. 吾爱培训,《05:反击作者的挑衅》讲师:我是用户 [爆破、追码]

  [复制链接]
chuiyan121 发表于 2022-2-26 13:37
本帖最后由 chuiyan121 于 2022-2-26 13:39 编辑


The041. 吾爱培训,《05:反击作者的挑衅》讲师:我是用户 [爆破、追码]
关于吾爱破解论坛官方入门教学培训第一期,我的学习记录,如有疑问欢迎交流指正。^_^
我是用户大牛教程很详细,注释也很丰富,我学习后简化了流程,仅将关键地方记录下来。

吾爱破解培训第五课作业.exe】->爆破。
0x0、根据作业的要求,重启后出现彩蛋按钮即为爆破成功。中文搜索字符串“彩蛋”,一共三个,第三个最贴切,双击它跳转到反汇编窗口。然后F2下断,F9运行到断点。


0x1、明显一个跳转跳过了“恭喜你发现彩蛋..”这一句,直接NOP大法爆破,保存文件为1.exe。


0x2、我是彩蛋按钮出现,爆破成功。



【吾爱破解培训第五课作业.exe】->追码。
0x0、程序输入注册码没有反应,到处搜索一番,原来密码是3段构成的,中间用减号“-”连接,格式为:“txt注册码-ini注册码-reg注册码”。按下图输入假码,提示注册成功,并在根目录分别生成:52Pojie.txt、52Pojie.ini和注册表52Pojie的confirm项,分别对应输入的3段假码。


0x1、OD重载程序,根据上集的方法知道ReadFile这个API这里主要用来读取txt文件里的内容,Ctrl+N打开输入表窗口,搜索ReadFile,回车弹出参考窗口,将所有地址下断点。


0x2、Ctrl+F2重载程序,F9运行后,程序断在004020B8处,发现了熟悉的真码和真假码比较函数。程序读取了txt文件里的假码“111111111”,并在循环函数中于真码的每一位进行比较。
因此得出txt的真码应该是:ITN3UXJGJ。


0x3、找到了txt的注册码,再试着找一下ini文件的注册码。Ctrl+N搜索GetPrivateProfileStringA,全部下断点。


0x4、Ctrl+F2重载程序,F9运行后,程序断在00402198处,这次就没那么好运,直接看到真码了。F8单步跟会发现004021B0处的循环获取假码的位数,然后cmp ecx,0xE比较假码位数是否为14位,若不是则跳走了。这时需要提前将ini文件里的假码改成14位,我提前改成了“12345678901234”。后面取出真码第一位存到edx,然后假码第一位存到ecx,然后是重点edx+30,最后比较edx和ecx,不相等则跳走。
在数据窗口跟随edx地址,发现了真码的雏形 :3A 1E 02 25 28 1A 48 15 3A 1D 02 25 28 1A。
既然知道edx加30才是真码,手动加30后为:6A 4E 32 55 58 4A 78 45 6A 4D 32 55 58 4A。
由此得出ini文件注册码为:jN2UXJxEjM2UXJ。


0x5、将前两段真码填入对应文件中,现在仅剩写入注册表里的那段注册码了。关于注册表操作的API函数有:创建注册表Key:RegCreateKey、打开注册表Key:RegOpenKey、查询注册表键值:RegQueryValue(Ex)、写入注册表键值:RegSetValueEx。这里同样使用Ctrl+N搜索RegQueryValueExA,全部下断点。


0x6、Ctrl+F2重载,F9运行几次,有一次明显程序缓冲后,跳到00402285处,发现了confirm特征,就是这里了。


0x7、F8慢慢跟进,后面的追码内容对于新手的我来说过于复杂了,这里借用前辈@奋仔的方法暂且记录下来,以后出息了再回头来研究吧。
[Asm] 纯文本查看 复制代码
[/color][/size]
[size=3][color=seagreen]00402255  |.  50            push eax                                 ; /pBufSize = 00000032[/color][/size]
[size=3][color=seagreen]00402256  |.  8D85 F4FEFFFF lea eax,[local.67]                       ; |[/color][/size]
[size=3][color=seagreen]0040225C  |.  50            push eax                                 ; |Buffer = 00000032[/color][/size]
[size=3][color=seagreen]0040225D  |.  8D85 F0FEFFFF lea eax,[local.68]                       ; |[/color][/size]
[size=3][color=seagreen]00402263  |.  50            push eax                                 ; |pValueType = 00000032[/color][/size]
[size=3][color=seagreen]00402264  |.  6A 00         push 0x0                                 ; |Reserved = NULL[/color][/size]
[size=3][color=seagreen]00402266  |.  68 34465400   push 吾爱破解.00544634                       ; |ValueName = "confirm"[/color][/size]
[size=3][color=seagreen]0040226B  |.  FFB5 E8FEFFFF push [local.70]                          ; |hKey = 0x100[/color][/size]
[size=3][color=seagreen]00402271  |.  C785 F0FEFFFF>mov [local.68],0x1                       ; |[/color][/size]
[size=3][color=seagreen]0040227B  |.  C785 ECFEFFFF>mov [local.69],0x104                     ; |[/color][/size]
[size=3][color=seagreen]00402285  |.  FF15 24305400 call dword ptr ds:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA[/color][/size]
[size=3][color=seagreen]0040228B  |.  85C0          test eax,eax                             ;  判断注册表该处是否输入了注册码[/color][/size]
[size=3][color=seagreen]0040228D  |.  0F85 E1000000 jnz 吾爱破解.00402374                        ;  若为空值,则跳转[/color][/size]
[size=3][color=seagreen]00402293  |.  8D8D F4FEFFFF lea ecx,[local.67]                       ;  输入假码的地址 ecx=0012F34C[/color][/size]
[size=3][color=seagreen]00402299  |.  8D51 01       lea edx,dword ptr ds:[ecx+0x1]           ;  输入假码的第2位地址 edx=0012F34D[/color][/size]
[size=3][color=seagreen]0040229C  |.  8D6424 00     lea esp,dword ptr ss:[esp]               ;  esp=0012F338[/color][/size]
[size=3][color=seagreen]004022A0  |>  8A01          /mov al,byte ptr ds:[ecx]                ;  取输入的假码第1位[/color][/size]
[size=3][color=seagreen]004022A2  |.  41            |inc ecx                                 ;  输入假码的地址+1,ecx+1[/color][/size]
[size=3][color=seagreen]004022A3  |.  84C0          |test al,al                              ;  检查假码位数是否为0[/color][/size]
[size=3][color=seagreen]004022A5  |.^ 75 F9         \jnz short 吾爱破解.004022A0                 ;  不为0才向上跳转[/color][/size]
[size=3][color=seagreen]004022A7  |.  2BCA          sub ecx,edx                              ;  获取输入假码的长度为9,ecx=00000009[/color][/size]
[size=3][color=seagreen]004022A9  |.  83C1 06       add ecx,0x6                              ;  输入假码长度+6,ecx=9+6=0000000F[/color][/size]
[size=3][color=seagreen]004022AC  |.  B8 CDCCCCCC   mov eax,0xCCCCCCCD                       ;  eax=CCCCCCCD[/color][/size]
[size=3][color=seagreen]004022B1  |.  F7E1          mul ecx                                  ;  eax*ecx=CCCCCCCD*F=00000003[/color][/size]
[size=3][color=seagreen]004022B3  |.  C1EA 02       shr edx,0x2                              ;  edx右移2位:edx=C,二进制为1100,偏移2位为11,即16进制的3[/color][/size]
[size=3][color=seagreen]004022B6  |.  83EA 03       sub edx,0x3                              ;  edx-3即3-3=0,edx=0则不跳转,这里edx必须为3[/color][/size]
[size=3][color=seagreen]004022B9  |.  0F85 B5000000 jnz 吾爱破解.00402374                        ;  此跳转不能让它实现,因此这里edx必须为0[/color][/size]
[size=3][color=seagreen]004022BF  |.  E8 D82D0000   call 吾爱破解.0040509C                       ;  eax=58E5DC,'lJT'的地址[/color][/size]
[size=3][color=seagreen]004022C4  |.  8BC8          mov ecx,eax                              ;  ecx指向'lJT'的地址[/color][/size]
[size=3][color=seagreen]004022C6  |.  85C9          test ecx,ecx                             ;  若ecx为0,则标志位ZF=1,跳转实现[/color][/size]
[size=3][color=seagreen]004022C8  |.  0F84 C3000000 je 吾爱破解.00402391[/color][/size]
[size=3][color=seagreen]004022CE  |.  8B01          mov eax,dword ptr ds:[ecx]               ;  eax=544A6C,就是'lJT'的地址[/color][/size]
[size=3][color=seagreen]004022D0  |.  FF50 0C       call dword ptr ds:[eax+0xC]              ;  eax=58E5E0,该地址存放着'iJT'的地址[/color][/size]
[size=3][color=seagreen]004022D3  |.  8A95 F8FEFFFF mov dl,byte ptr ss:[ebp-0x108]           ;  dl=输入假码第5位[/color][/size]
[size=3][color=seagreen]004022D9  |.  8D70 10       lea esi,dword ptr ds:[eax+0x10][/color][/size]
[size=3][color=seagreen]004022DC  |.  0FBE85 F4FEFF>movsx eax,byte ptr ss:[ebp-0x10C]        ;  eax取输入假码第1位[/color][/size]
[size=3][color=seagreen]004022E3  |.  0FBECA        movsx ecx,dl                             ;  ecx=输入假码第5位[/color][/size]
[size=3][color=seagreen]004022E6  |.  48            dec eax                                  ;  eax值-1,即31-1=30[/color][/size]
[size=3][color=seagreen]004022E7  |.  89B5 E4FEFFFF mov [local.71],esi[/color][/size]
[size=3][color=seagreen]004022ED  |.  3BC1          cmp eax,ecx                              ;  eax与ecx对比,反推2:假码第1位是3[/color][/size]
[size=3][color=seagreen]004022EF  |.  75 69         jnz short 吾爱破解.0040235A                  ;  不相等则跳走,必须相等[/color][/size]
[size=3][color=seagreen]004022F1  |.  0FBE85 FCFEFF>movsx eax,byte ptr ss:[ebp-0x104]        ;  eax取输入假码最后一位[/color][/size]
[size=3][color=seagreen]004022F8  |.  83C1 02       add ecx,0x2                              ;  ecx=输入假码第5位的值+2[/color][/size]
[size=3][color=seagreen]004022FB  |.  3BC8          cmp ecx,eax                              ;  ecx与eax比较,反推3:假码第9位是4[/color][/size]
[size=3][color=seagreen]004022FD  |.  75 5B         jnz short 吾爱破解.0040235A                  ;  不相等则跳走,必须相等[/color][/size]
[size=3][color=seagreen]004022FF  |.  80F2 54       xor dl,0x54                              ;  dl的值与54异或后为66,计算出dl必须为2,反推1:假码第5位是2[/color][/size]
[size=3][color=seagreen]00402302  |.  80FA 66       cmp dl,0x66                              ;  dl与66对比[/color][/size]
[size=3][color=seagreen]00402305  |.  75 53         jnz short 吾爱破解.0040235A                  ;  不相等则跳走,必须相等[/color][/size]
[size=3][color=seagreen]00402307  |.  6A 03         push 0x3                                 ;  比较3位[/color][/size]
[size=3][color=seagreen]00402309  |.  8D85 F5FEFFFF lea eax,dword ptr ss:[ebp-0x10B]         ;  eax取输入假码第2位开始的子串1地址0012F34D[/color][/size]
[size=3][color=seagreen]0040230F  |.  68 3C465400   push 吾爱破解.0054463C                       ;  压入真码的一部分"MjM"[/color][/size]
[size=3][color=seagreen]00402314  |.  50            push eax                                 ;  压入假码子串地址,eax=0012F34D[/color][/size]
[size=3][color=seagreen]00402315  |.  E8 76991100   call 吾爱破解.0051BC90                       ;  比较子串前3位,也就是假码的2-4位[/color][/size]
[size=3][color=seagreen]0040231A  |.  83C4 0C       add esp,0xC[/color][/size]
[size=3][color=seagreen]0040231D  |.  85C0          test eax,eax                             ;  若比较结果相同,则eax=0[/color][/size]
[size=3][color=seagreen]0040231F  |.  75 39         jnz short 吾爱破解.0040235A                  ;  不跳转[/color][/size]
[size=3][color=seagreen]00402321  |.  6A 03         push 0x3                                 ;  比较3位[/color][/size]
[size=3][color=seagreen]00402323  |.  8D85 F9FEFFFF lea eax,dword ptr ss:[ebp-0x107]         ;  eax取输入假码第6位开始的子串2地址0012F351[/color][/size]
[size=3][color=seagreen]00402329  |.  68 40465400   push 吾爱破解.00544640                       ;  压入真码的一部分"UXJ"[/color][/size]
[size=3][color=seagreen]0040232E  |.  50            push eax                                 ;  压入假码子串地址,eax=0012F351[/color][/size]
[size=3][color=seagreen]0040232F  |.  E8 5C991100   call 吾爱破解.0051BC90                       ;  比较子串前3位,也就是假码的6-8位[/color][/size]
[size=3][color=seagreen]00402334  |.  83C4 0C       add esp,0xC[/color][/size]
[size=3][color=seagreen]00402337  |.  85C0          test eax,eax                             ;  若比较结果相同,则eax=0[/color][/size]
[size=3][color=seagreen]00402339  |.  75 1F         jnz short 吾爱破解.0040235A                  ;  不跳转,至此追码完成,真码为:3MjM2UXJ4[/color][/size]
[size=3][color=seagreen]


0x8、运行程序,提示“恭喜你发现彩蛋…”,程序界面出现我是彩蛋按钮,追码完成。






发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

犀角大王 发表于 2022-2-26 19:39
高端看不到@犀角大王
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表