CrackMe.HappyTown.VC.0042简单分析
HappyTown的东东 我一般都不错过看下的 :)
HappyTown的程序一般没什么anti
那么可以断到这里
00401123 |. 83F8 03 CMP EAX,3 ; 用户名长度不小于3
00401126 |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX
0040112A |. 73 0D JNB SHORT CrackMe_.00401139
0040112C |. 5F POP EDI
0040112D |. 5E POP ESI
0040112E |. 5D POP EBP
0040112F |. 33C0 XOR EAX,EAX
00401131 |. 5B POP EBX
00401132 |. 81C4 FC010000 ADD ESP,1FC
00401138 |. C3 RET
00401139 |> 8B8C24 100200>MOV ECX,DWORD PTR SS:[ESP+210]
00401140 |. 8D8424 280100>LEA EAX,DWORD PTR SS:[ESP+128]
00401147 |. 6A 65 PUSH 65 ; /Count = 65 (101.)
00401149 |. 50 PUSH EAX ; |Buffer
0040114A |. 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.)
0040114F |. 51 PUSH ECX ; |hWnd
00401150 |. FF15 C8904000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA
00401156 |. 85C0 TEST EAX,EAX ;sn不能为空
00401158 |. 77 0D JA SHORT CrackMe_.00401167
0040115A |. 5F POP EDI
0040115B |. 5E POP ESI
0040115C |. 5D POP EBP
0040115D |. 33C0 XOR EAX,EAX
0040115F |. 5B POP EBX
00401160 |. 81C4 FC010000 ADD ESP,1FC
00401166 |. C3 RET
00401167 |> 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
0040116B |. 8D9424 280100>LEA EDX,DWORD PTR SS:[ESP+128]
00401172 |. 52 PUSH EDX
00401173 |. 50 PUSH EAX
00401174 |. C787 34020000>MOV DWORD PTR DS:[EDI+234],0A
0040117E |. E8 4D2D0000 CALL <CrackMe_._cinstr> ; sn转化为16进制=hex(sn)
00401183 |. 8B4C24 1C MOV ECX,DWORD PTR SS:[ESP+1C]
00401187 |. C787 34020000>MOV DWORD PTR DS:[EDI+234],10
00401191 |. 8B7C24 20 MOV EDI,DWORD PTR SS:[ESP+20]
00401195 |. 57 PUSH EDI
00401196 |. 51 PUSH ECX
00401197 |. 57 PUSH EDI ; 110BA2EE0*hex(sn)=x1
00401198 |. E8 D31D0000 CALL <CrackMe_._multiply> ; edi=edi*ecx
0040119D |. 55 PUSH EBP ; |Arg3
0040119E |. 55 PUSH EBP ; |Arg2
0040119F |. 57 PUSH EDI ; |Arg1
004011A0 |. E8 3B230000 CALL <CrackMe_._divide> ; \CrackMe_.004034E0
004011A5 |. 8B4C24 30 MOV ECX,DWORD PTR SS:[ESP+30] ; edi=x1 mod 140000063=x2
004011A9 |. 83C4 20 ADD ESP,20
004011AC |. 85C9 TEST ECX,ECX
004011AE |. 76 30 JBE SHORT CrackMe_.004011E0
004011B0 |. 8DAC24 C40000>LEA EBP,DWORD PTR SS:[ESP+C4]
004011B7 |. B8 01000000 MOV EAX,1
004011BC |. BF 4A42F483 MOV EDI,83F4424A
004011C1 |. 4D DEC EBP
004011C2 |> 33D2 /XOR EDX,EDX
004011C4 |. 8A1428 |MOV DL,BYTE PTR DS:[EAX+EBP]
004011C7 |. 0FAFD0 |IMUL EDX,EAX
004011CA |. 42 |INC EDX
004011CB |. 0FAFD6 |IMUL EDX,ESI
004011CE |. 33D7 |XOR EDX,EDI
004011D0 |. 81EF B6BD0B7C |SUB EDI,7C0BBDB6
004011D6 |. 40 |INC EAX
004011D7 |. 8BF2 |MOV ESI,EDX
004011D9 |. 8D50 FF |LEA EDX,DWORD PTR DS:[EAX-1]
004011DC |. 3BD1 |CMP EDX,ECX
004011DE |.^ 72 E2 \JB SHORT CrackMe_.004011C2
004011E0 |> 33C0 XOR EAX,EAX
004011E2 |> 8BCE /MOV ECX,ESI
004011E4 |. C1E9 1F |SHR ECX,1F
004011E7 |. 80E1 01 |AND CL,1
004011EA |. 884C04 24 |MOV BYTE PTR SS:[ESP+EAX+24],CL
004011EE |. D1E6 |SHL ESI,1
004011F0 |. 40 |INC EAX
004011F1 |. 83F8 20 |CMP EAX,20
004011F4 |.^ 72 EC \JB SHORT CrackMe_.004011E2
004011F6 |. 33F6 XOR ESI,ESI
004011F8 |> 33D2 /XOR EDX,EDX
004011FA |. 6A 00 |PUSH 0
004011FC |. 8A5434 28 |MOV DL,BYTE PTR SS:[ESP+ESI+28]
00401200 |. 8BFA |MOV EDI,EDX
00401202 |. 0FAF7CB4 48 |IMUL EDI,DWORD PTR SS:[ESP+ESI*4+48]
00401207 |. 897CB4 48 |MOV DWORD PTR SS:[ESP+ESI*4+48],EDI
0040120B |. E8 60060000 |CALL <CrackMe_._mirvar>
00401210 |. 8BE8 |MOV EBP,EAX
00401212 |. 55 |PUSH EBP
00401213 |. 57 |PUSH EDI
00401214 |. 89ACB4 980100>|MOV DWORD PTR SS:[ESP+ESI*4+198],EBP
0040121B |. E8 D0050000 |CALL CrackMe_.004017F0
00401220 |. 53 |PUSH EBX
00401221 |. 53 |PUSH EBX
00401222 |. 55 |PUSH EBP
00401223 |. E8 B81A0000 |CALL <CrackMe_._add>
00401228 |. 83C4 18 |ADD ESP,18
0040122B |. 46 |INC ESI
0040122C |. 83FE 20 |CMP ESI,20
0040122F |.^ 7C C7 \JL SHORT CrackMe_.004011F8
00401231 |. 8B7424 20 MOV ESI,DWORD PTR SS:[ESP+20]
00401235 |. 56 PUSH ESI
00401236 |. 56 PUSH ESI
00401237 |. 53 PUSH EBX
00401238 |. E8 A3220000 CALL <CrackMe_._divide>
0040123D |. 8B7C24 24 MOV EDI,DWORD PTR SS:[ESP+24]
00401241 |. 57 PUSH EDI
00401242 |. 53 PUSH EBX
00401243 |. E8 48130000 CALL <CrackMe_._compare> ;这里有个比较,只有相等才能注册成功
00401248 |. 83C4 14 ADD ESP,14
0040124B |. 85C0 TEST EAX,EAX
0040124D |. 56 PUSH ESI
0040124E |. 74 57 JE SHORT CrackMe_.004012A7 ; 跳转要实现
00401250 |. E8 EB0F0000 CALL <CrackMe_._mirkill>
00401255 |. 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
00401259 |. 50 PUSH EAX
0040125A |. E8 E10F0000 CALL <CrackMe_._mirkill>
0040125F |. 8B4C24 24 MOV ECX,DWORD PTR SS:[ESP+24]
00401263 |. 51 PUSH ECX
00401264 |. E8 D70F0000 CALL <CrackMe_._mirkill>
00401269 |. 53 PUSH EBX
0040126A |. E8 D10F0000 CALL <CrackMe_._mirkill>
0040126F |. 57 PUSH EDI
00401270 |. E8 CB0F0000 CALL <CrackMe_._mirkill>
00401275 |. 83C4 14 ADD ESP,14
00401278 |. 8DB424 8C0100>LEA ESI,DWORD PTR SS:[ESP+18C]
0040127F |. BF 20000000 MOV EDI,20
00401284 |> 8B16 /MOV EDX,DWORD PTR DS:[ESI]
00401286 |. 52 |PUSH EDX
00401287 |. E8 B40F0000 |CALL <CrackMe_._mirkill>
0040128C |. 83C4 04 |ADD ESP,4
0040128F |. 83C6 04 |ADD ESI,4
00401292 |. 4F |DEC EDI
00401293 |.^ 75 EF \JNZ SHORT CrackMe_.00401284
00401295 |. E8 C60F0000 CALL CrackMe_.00402260
0040129A |. 5F POP EDI
0040129B |. 5E POP ESI
0040129C |. 5D POP EBP
0040129D |. 33C0 XOR EAX,EAX
0040129F |. 5B POP EBX
004012A0 |. 81C4 FC010000 ADD ESP,1FC
004012A6 |. C3 RET
004012A7 |> E8 940F0000 CALL <CrackMe_._mirkill>
004012AC |. 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
004012B0 |. 50 PUSH EAX
004012B1 |. E8 8A0F0000 CALL <CrackMe_._mirkill>
004012B6 |. 8B4C24 24 MOV ECX,DWORD PTR SS:[ESP+24]
004012BA |. 51 PUSH ECX
004012BB |. E8 800F0000 CALL <CrackMe_._mirkill>
004012C0 |. 53 PUSH EBX
004012C1 |. E8 7A0F0000 CALL <CrackMe_._mirkill>
004012C6 |. 57 PUSH EDI
004012C7 |. E8 740F0000 CALL <CrackMe_._mirkill>
004012CC |. 83C4 14 ADD ESP,14
004012CF |. 8DB424 8C0100>LEA ESI,DWORD PTR SS:[ESP+18C]
004012D6 |. BF 20000000 MOV EDI,20
004012DB |> 8B16 /MOV EDX,DWORD PTR DS:[ESI]
004012DD |. 52 |PUSH EDX
004012DE |. E8 5D0F0000 |CALL <CrackMe_._mirkill>
004012E3 |. 83C4 04 |ADD ESP,4
004012E6 |. 83C6 04 |ADD ESI,4
004012E9 |. 4F |DEC EDI
004012EA |.^ 75 EF \JNZ SHORT CrackMe_.004012DB
004012EC |. E8 6F0F0000 CALL CrackMe_.00402260
004012F1 |. 5F POP EDI
004012F2 |. 5E POP ESI
004012F3 |. 5D POP EBP
004012F4 |. B8 01000000 MOV EAX,1
004012F9 |. 5B POP EBX
004012FA |. 81C4 FC010000 ADD ESP,1FC
00401300 \. C3 RET
这个crackeme很简单 也很明了 我不做过多说明了
直接给出注册过程
(hex(sn)*110BA2EE0(固定数)) mod 140000063(固定数)=f(user)
只要等式成立就OK了
至于f(user),我是懒得看了 反正是拿用户名来乘下 或者除下 然后再加只类 一大堆
这个不用管 因为程序在后面会给出结果,我们只要知道f(user)是一个固定的数即可。
这样的话把上面的式子简化下 并转为10进制如下:
y=(5368709219*x+87271158)/4575604448
只要x ,y都为整数即可。
那么就可以转变为求二元一次不定方程的问题。
这个不定方程对于没学过初等数论的朋友来说也许难了点。不过看过相关知识的 就EASY了。
我用手工5分钟就算了出来。
对于用户名是kyo327的可求出sn通解如下:
y=sn=3057556534+5368709219t
t=1,2,3,4,……
所以
user=kyo327
sn=3057556534+5368709219*t(t为自然数)
至于f(user)的算法 如果不写注册机 就不用分析了。
我反正懒得分析了 有点 烦琐哦。哪为有空人士可以跟一下哦 我大概看了下 应该也不难。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!