阿虚
Hello World!
Hello World!
跃跃欲试

0x0 环境

——————–

环境:

系统:Windows 10

工具:Ollydbg

——————–

0x1 跑起来

       这玩意要求输入邮件地址和序列号,随便输入弹出对话框提示“Registration failure.”

http://www.xuwu.org/wp-content/uploads/2020/02/yyws.png

0x2 IDA分析

       这玩意加了壳。。。。不过看字符串里面发现有MessageBoxA的字符串。

http://www.xuwu.org/wp-content/uploads/2020/02/yyws2.png
http://www.xuwu.org/wp-content/uploads/2020/02/yyws3.png

0x3 Ollydbg分析

       用OD载入程序后对MessageBoxA函数ret处下cc断点后点击OK可以看到OD在函数尾部断下来了。

http://www.xuwu.org/wp-content/uploads/2020/02/yyws4.png

       F8一下MessageBoxA的上层返回出是在000A1300

http://www.xuwu.org/wp-content/uploads/2020/02/yyws5.png

       返回到此处看下当前栈窗口可以知道当前函数上层都是user32的代码空间所以猜测找到当前函数头看看上面有什么内容。

http://www.xuwu.org/wp-content/uploads/2020/02/yyws6.png

       网上翻阅找到字符串“Your E-mail address in not valid.”

http://www.xuwu.org/wp-content/uploads/2020/02/yyws7.png

       找到一个很关键的地方,OD分析出在000A10AF处给ESI的值为GetDlgItemTextA函数的地址,并且在000A10CA和000A10DE处有对ESI进行CALL调用,此处肯定就是拿邮件地址和序列号的地方了。在往上翻就到了当前函数头了。

http://www.xuwu.org/wp-content/uploads/2020/02/yyws8.png

       000A10CA处拿到的是输入的邮件地址

http://www.xuwu.org/wp-content/uploads/2020/02/yyws9.png

       000A10DE处拿到的是输入的序列号。

http://www.xuwu.org/wp-content/uploads/2020/02/yyws10.png
000A10AF     8B35 10C10A00      mov esi,dword ptr ds:[AC110]                       ; user32.GetDlgItemTextA
000A10B5     8D85 C0FCFFFF      lea eax,dword ptr ss:[ebp-340]
000A10BB     83C4 24            add esp,24
000A10BE     68 00010000        push 100
000A10C3     50                 push eax
000A10C4     68 E9030000        push 3E9
000A10C9     53                 push ebx
000A10CA     FFD6               call esi                                           ; 获取输入的邮件地址
000A10CC     68 00010000        push 100
000A10D1     8D85 C0FDFFFF      lea eax,dword ptr ss:[ebp-240]
000A10D7     50                 push eax
000A10D8     68 EA030000        push 3EA
000A10DD     53                 push ebx
000A10DE     FFD6               call esi                                           ; 获取输入的序列号
000A10E0     8D85 C0FCFFFF      lea eax,dword ptr ss:[ebp-340]
000A10E6     68 0CFD0A00        push yyys.000AFD0C                                 ; 参数二: "@"
000A10EB     50                 push eax                                           ; 参数一: 输入的邮件地址
000A10EC     E8 AF020000        call yyys.000A13A0                                 ; 猜测为检查输入的邮件地址中是否包含了@字符集
000A10F1     83C4 08            add esp,8
000A10F4     85C0               test eax,eax
000A10F6     74 4C              je short yyys.000A1144                             ; 没有包含就跳转到000A1144 "Your E-mail address in not valid."
000A10F8     8D85 C0FCFFFF      lea eax,dword ptr ss:[ebp-340]
000A10FE     68 34FD0A00        push yyys.000AFD34                                 ; 参数二: "."
000A1103     50                 push eax                                           ; 参数一: 输入的邮件地址
000A1104     E8 97020000        call yyys.000A13A0                                 ; 猜测为检查输入的邮件地址中是否包含了.字符集
000A1109     83C4 08            add esp,8
000A110C     85C0               test eax,eax
000A110E     74 34              je short yyys.000A1144
000A1110     8D85 C0FCFFFF      lea eax,dword ptr ss:[ebp-340]
000A1116     68 34FD0A00        push yyys.000AFD34
000A111B     50                 push eax
000A111C     E8 7F020000        call yyys.000A13A0                                 ; 这个检查和上面一样
000A1121     83C4 08            add esp,8
000A1124     8078 01 00         cmp byte ptr ds:[eax+1],0
000A1128     74 1A              je short yyys.000A1144
000A112A     8D85 C0FCFFFF      lea eax,dword ptr ss:[ebp-340]
000A1130     68 0CFD0A00        push yyys.000AFD0C
000A1135     50                 push eax
000A1136     E8 65020000        call yyys.000A13A0                                 ; 这个检查和上面一样
000A113B     83C4 08            add esp,8
000A113E     8078 01 2E         cmp byte ptr ds:[eax+1],2E
000A1142     75 0A              jnz short yyys.000A114E
000A1144     68 10FD0A00        push yyys.000AFD10                                 ; ASCII "Your E-mail address in not valid."
000A1149     E9 57010000        jmp yyys.000A12A5
000A114E     66:0F6F05 70FD0A00 movq mm0,qword ptr ds:[AFD70]
000A1156     8D8D C0FDFFFF      lea ecx,dword ptr ss:[ebp-240]
000A115C     F3:                prefix rep:
000A115D     0F7F45 E4          movq qword ptr ss:[ebp-1C],mm0
000A1161     8D51 01            lea edx,dword ptr ds:[ecx+1]
000A1164     C745 F4 6C757265   mov dword ptr ss:[ebp-C],6572756C
000A116B     66:0F6F05 60FD0A00 movq mm0,qword ptr ds:[AFD60]
000A1173     F3:                prefix rep:                                        ; 这一大段不知道计算啥没细看
000A1174     0F7F45 C0          movq qword ptr ss:[ebp-40],mm0
000A1178     66:C745 F8 2E00    mov word ptr ss:[ebp-8],2E
000A117E     66:0F6F05 50FD0A00 movq mm0,qword ptr ds:[AFD50]
000A1186     F3:                prefix rep:
000A1187     0F7F45 D0          movq qword ptr ss:[ebp-30],mm0
000A118B     C745 E0 69733A00   mov dword ptr ss:[ebp-20],3A7369
000A1192     8A01               mov al,byte ptr ds:[ecx]
000A1194     41                 inc ecx                                            ; 计算输入序列号的长度
000A1195     84C0               test al,al
000A1197   ^ 75 F9              jnz short yyys.000A1192
000A1199     2BCA               sub ecx,edx
000A119B     83F9 10            cmp ecx,10
000A119E     0F85 FD000000      jnz yyys.000A12A1                                  ; 序列号必须满足16位字符否则注册失败
000A11A4     80BD C0FDFFFF 42   cmp byte ptr ss:[ebp-240],42                       ; [ebp-240]保存输入的序列号,判断序列号第一个字符是否为‘B’
000A11AB     0F85 F0000000      jnz yyys.000A12A1                                  ; 不是则检查失败
000A11B1     0FBE85 CFFDFFFF    movsx eax,byte ptr ss:[ebp-231]
000A11B8     83C0 42            add eax,42
000A11BB     3D 9B000000        cmp eax,9B                                         ; 检查最后一个字符+0x42是否等于0x9B
000A11C0     0F85 DB000000      jnz yyys.000A12A1                                  ; 不是0x9B检查失败
000A11C6     0FBE8D C1FDFFFF    movsx ecx,byte ptr ss:[ebp-23F]
000A11CD     8D41 FD            lea eax,dword ptr ds:[ecx-3]
000A11D0     83F8 57            cmp eax,57                                         ; 检查第二个字符-0x3是否为0x57
000A11D3     0F85 C8000000      jnz yyys.000A12A1                                  ; 不是则检查失败
000A11D9     0FBE85 CEFDFFFF    movsx eax,byte ptr ss:[ebp-232]
000A11E0     03C1               add eax,ecx
000A11E2     3D 9B000000        cmp eax,9B                                         ; 检查倒数第二个字符+第二个字符0x5A是否为0x9B
000A11E7     0F85 B4000000      jnz yyys.000A12A1                                  ; 不是则检查失败
000A11ED     0FBE8D C2FDFFFF    movsx ecx,byte ptr ss:[ebp-23E]
000A11F4     8D41 01            lea eax,dword ptr ds:[ecx+1]
000A11F7     83F8 3A            cmp eax,3A                                         ; 检查第三个字符+1是否为0x3A
000A11FA     0F85 A1000000      jnz yyys.000A12A1                                  ; 不是则检查失败
000A1200     0FBE85 CDFDFFFF    movsx eax,byte ptr ss:[ebp-233]
000A1207     03C1               add eax,ecx
000A1209     3D 9B000000        cmp eax,9B                                         ; 检查倒数第三个字符+第三个字符是否为0x9B
000A120E     0F85 8D000000      jnz yyys.000A12A1                                  ; 不是则检查失败
000A1214     80BD C3FDFFFF 64   cmp byte ptr ss:[ebp-23D],64                       ; 检查第四个字符是否为0x64
000A121B     0F85 80000000      jnz yyys.000A12A1
000A1221     0FBE85 CCFDFFFF    movsx eax,byte ptr ss:[ebp-234]
000A1228     83C0 64            add eax,64
000A122B     3D 9B000000        cmp eax,9B                                         ; 检查倒数第四个字符+0x64是否为0x9B
000A1230     75 6F              jnz short yyys.000A12A1
000A1232     80BD C4FDFFFF 6D   cmp byte ptr ss:[ebp-23C],6D                       ; 检查第五个字符是否为0x6D
000A1239     75 66              jnz short yyys.000A12A1
000A123B     0FBE85 CBFDFFFF    movsx eax,byte ptr ss:[ebp-235]
000A1242     05 81000000        add eax,81
000A1247     3D C8000000        cmp eax,0C8                                        ; 检查倒数第五个字符+0x81是否为0xC0
000A124C     75 53              jnz short yyys.000A12A1
000A124E     0FBE8D C5FDFFFF    movsx ecx,byte ptr ss:[ebp-23B]
000A1255     8D41 D3            lea eax,dword ptr ds:[ecx-2D]
000A1258     83F8 44            cmp eax,44                                         ; 检查第六个字符-0x2D是否为0x44
000A125B     75 44              jnz short yyys.000A12A1
000A125D     0FBE85 CAFDFFFF    movsx eax,byte ptr ss:[ebp-236]
000A1264     03C1               add eax,ecx
000A1266     3D AA000000        cmp eax,0AA                                        ; 检查倒数第六个字符+第六个字符是否为0xAA
000A126B     75 34              jnz short yyys.000A12A1
000A126D     80BD C6FDFFFF 34   cmp byte ptr ss:[ebp-23A],34                       ; 检查第七个字符是否为0x34
000A1274     75 2B              jnz short yyys.000A12A1
000A1276     0FBE85 C9FDFFFF    movsx eax,byte ptr ss:[ebp-237]
000A127D     83C0 34            add eax,34
000A1280     3D 9B000000        cmp eax,9B                                         ; 检查倒数第七个字符+0x34是否为0x9B
000A1285     75 1A              jnz short yyys.000A12A1
000A1287     80BD C7FDFFFF 63   cmp byte ptr ss:[ebp-239],63                       ; 检查第八个字符是否为0x63
000A128E     75 11              jnz short yyys.000A12A1
000A1290     0FBE85 C8FDFFFF    movsx eax,byte ptr ss:[ebp-238]
000A1297     83C0 63            add eax,63
000A129A     3D 9B000000        cmp eax,9B                                         ; 检查倒数第八个字符+0x63是否为0x9B
000A129F     74 1A              je short yyys.000A12BB
000A12A1     8D45 E4            lea eax,dword ptr ss:[ebp-1C]
000A12A4     50                 push eax
000A12A5     8D85 C0FEFFFF      lea eax,dword ptr ss:[ebp-140]
000A12AB     68 00010000        push 100
000A12B0     50                 push eax
000A12B1     E8 4D030000        call yyys.000A1603                                 ; 注册失败提示
000A12B6     83C4 0C            add esp,0C
000A12B9     EB 30              jmp short yyys.000A12EB
000A12BB     8D45 C0            lea eax,dword ptr ss:[ebp-40]
000A12BE     50                 push eax
000A12BF     8D85 C0FEFFFF      lea eax,dword ptr ss:[ebp-140]
000A12C5     68 00010000        push 100
000A12CA     50                 push eax
000A12CB     E8 33030000        call yyys.000A1603                                 ; 注册成功提示

0x04后记

这个调试起来没什么难度,输入的 地址纯粹只是个检查是否满足为邮件地址并没有什么算法并且序列号也是写死的“BZ9dmq4c8g9G7bAY”即可注册成功。这么简单的猜谜为什么要加一个壳呢。。

阿虚

文章作者

发表评论

textsms
account_circle
email

Hello World!

跃跃欲试
0x0 环境 -------------------- 环境: 系统:Windows 10 工具:Ollydbg -------------------- 0x1 跑起来        这玩意要求输入邮件地址和序列号,随便输入弹出对…
扫描二维码继续阅读
2020-02-27