冥界3大法王 发表于 2019-8-13 10:00

对"傻白甜1号样本"的逆向分析

本帖最后由 冥界3大法王 于 2019-8-14 11:15 编辑

查壳,了解敌情很重要。哇,超短裙,没穿安全裤。可以开搞了。


时间提醒的不太好截图,需要等待,以后再补

https://static.52pojie.cn/static/image/hrline/2.gif
形为表现:
有3个功能限制
A. 功能限制:所以可以细分
   a1.不能打印 ,不能保存 (弹框入手)
   a2.时间限制20分钟后提醒并退出(计时器入手)
B.从未注册字样入手

C.从注册码入手
图C1

https://static.52pojie.cn/static/image/hrline/2.gif
下面先从C情况说起:
如用OllyDBG或X32dbg字符串分搜索不到
所以请出WinHEX, 按图那样搜索下


点中这个T右击,复制该菜单项
然后咱们把StrongOD.dll复制到看雪论坛光盘加密解密第四版的OD的Plugin的目录里,并运行OD

来到009168D0
然后mr 009168D0下内存访问断点(OD命令行上)
当在图C1中点击就被断了下来,现在我们可以删除内存断点了md (OD命令行上)
然后我们看堆栈窗口:
堆栈是内存中缓存数据等暂时交换的桥梁。好比美女的裙摆下风光。{:301_997:}
这样比方贴切吧,只有在特定的时刻,才能呈现异样的精彩,并且全是短暂或稍纵即逝的,所以要把握住时机哟,不然可就错过了。
0019D374/0019D3A0
0019D378|7647D41E返回到 KernelBa.7647D41E 来自 <jmp.&ntdll.memcpy>
0019D37C|0019D5F8
0019D380|009168D0UNICODE "The license name or authorization code is invalid. Please try again.-This license for Sketchpad will"
0019D384|00000088
0019D388|762AAF60kernel32.FindResourceW
0019D38C|7647D3A0KernelBa.LoadStringBaseExW
0019D390|762A52E0kernel32.LoadResource
0019D394|00000000
0019D398|009168D0UNICODE "The license name or authorization code is invalid. Please try again.-This license for Sketchpad will"
0019D39C|00000044 可以看到上面几行调用资源,装载字符串
0019D3A0]0019D3C0
0019D3A4|76C5FB64返回到 user32.76C5FB64
0019D3A8|00400000GSP5.00400000
0019D3AC|000010AF
0019D3B0|0019D5F8
0019D3B4|00000100
0019D3B8|00000000
0019D3BC|000010AF
0019D3C0\762B1BA0kernel32.LockResource
0019D3C4   004B22C3返回到 GSP5.004B22C3 来自 user32.LoadStringW;这里用到了这个函数,其实可以bp LoadStringW直接拦!


0019D3C4   004B22C3返回到 GSP5.004B22C3 来自 user32.LoadStringW这句上我们回车,汇编窗口跟随。
关于OD的堆栈、dump、汇编窗口等的热键楼主打印了一张A4表格,方便熟练使用和修炼进阶技能

004B21D0/$81EC 18040000 sub   esp, 418 这是段首
004B21D6|.A1 9C496A00   mov   eax, dword ptr
004B21DB|.33C4          xor   eax, esp
004B21DD|.898424 140400>mov   dword ptr , eax
004B21E4|.53            push    ebx
004B21E5|.55            push    ebp
004B21E6|.56            push    esi
004B21E7|.33F6          xor   esi, esi
004B21E9|.57            push    edi
004B21EA|.B8 A8C86400   mov   eax, 0064C8A8
004B21EF|.33C9          xor   ecx, ecx
004B21F1|>3B10          /cmp   edx, dword ptr             ;cmp1发现的第一个比较
004B21F3|.74 10         |je      short 004B2205
004B21F5|.83C1 01       |add   ecx, 1
004B21F8|.83C0 10       |add   eax, 10
004B21FB|.81F9 88000000 |cmp   ecx, 88                         ;cmp2 发现的第2个比较
004B2201|.^ 72 EE         \jb      short 004B21F1
004B2203|.EB 1E         jmp   short 004B2223
004B2205|>0FB778 04   movzx   edi, word ptr
004B2209|.897C24 18   mov   dword ptr , edi
004B220D|.0FB778 06   movzx   edi, word ptr
004B2211|.897C24 1C   mov   dword ptr , edi
004B2215|.8B78 08       mov   edi, dword ptr
004B2218|.8B40 0C       mov   eax, dword ptr
004B221B|.897C24 10   mov   dword ptr , edi
004B221F|.894424 14   mov   dword ptr , eax
004B2223|>81F9 88000000 cmp   ecx, 88                        ;cmp3 发现的第3个比较
004B2229|.75 29         jnz   short 004B2254
004B222B|.83FA 69       cmp   edx, 69
004B222E|.0F84 11010000 je      004B2345
004B2234|.3BD6          cmp   edx, esi                         ;cmp4
004B2236|.0F84 09010000 je      004B2345
004B223C|.C74424 18 060>mov   dword ptr , 6
004B2244|.C74424 1C 070>mov   dword ptr , 7
004B224C|.897424 10   mov   dword ptr , esi
004B2250|.897424 14   mov   dword ptr , esi
004B2254|>3935 74C66B00 cmp   dword ptr , esi          ;cmp5 第5个比较,而且出现在了字符加载的最上面
004B225A|.8B3D 34556300 mov   edi, dword ptr [<&KERNEL32.FindR>;kernel32.FindResourceW
004B2260|.8B1D 28556300 mov   ebx, dword ptr [<&KERNEL32.LoadR>;kernel32.LoadResource
004B2266|.8B2D 3C556300 mov   ebp, dword ptr [<&KERNEL32.LockR>;kernel32.LockResource
004B226C|.75 25         jnz   short 004B2293
004B226E|.6A 0A         push    0A                               ; /ResourceType = RT_RCDATA
004B2270|.68 80000000   push    80                               ; |ResourceName = 80
004B2275|.56            push    esi                              ; |hModule
004B2276|.FFD7          call    edi                              ; \FindResourceW
004B2278|.50            push    eax                              ; /hResource
004B2279|.56            push    esi                              ; |hModule
004B227A|.FFD3          call    ebx                              ; \LoadResource
004B227C|.50            push    eax                              ; /hResource
004B227D|.FFD5          call    ebp                              ; \LockResource
004B227F|.83C0 02       add   eax, 2
004B2282|.A3 9C886B00   mov   dword ptr , eax
004B2287|.C705 74C66B00>mov   dword ptr , 1
004B2291|.EB 05         jmp   short 004B2298
004B2293|>A1 9C886B00   mov   eax, dword ptr
004B2298|>0FB770 24   movzx   esi, word ptr
004B229C|.0FB74C24 1C   movzx   ecx, word ptr
004B22A1|.03F1          add   esi, ecx
004B22A3|.E8 B6CD0D00   call    0058F05E
004B22A8|.8B40 04       mov   eax, dword ptr
004B22AB|.8B40 44       mov   eax, dword ptr
004B22AE|.68 00010000   push    100                              ; /Count = 100 (256.)
004B22B3|.8D9424 240200>lea   edx, dword ptr          ; |
004B22BA|.52            push    edx                              ; |Buffer
004B22BB|.56            push    esi                              ; |RsrcID
004B22BC|.50            push    eax                              ; |hInst
004B22BD|.FF15 EC596300 call    dword ptr [<&USER32.LoadStringW>>; \LoadStringW
004B22C3|.833D 74C66B00>cmp   dword ptr , 0            ;堆栈回车先达此处!cmp6 第6个比较,如没经验会误以为这里,实际这里已经走老了

所以,经过分析,我们猜测 这个内存的结果注定了下面的字符串会不会加载,从而影响程序的走向

然后我们右击菜单,查找所有常量,并点图中菜单项

0019B86C   0045B29A返回到 GSP5.0045B29A 来自 GSP5.00527410 堆栈上这里回车跟过去

这次我们发现的注册名
本地调用来自 0045B5B3 我们从这再跟过去(那注册码呢? 也就在不远处了,继续潜伏跟踪
最终达到
0045B530/$81EC 640D0000 sub   esp, 0D64                        ;从这里再下个断
0045B536|.A1 9C496A00   mov   eax, dword ptr
0045B53B|.33C4          xor   eax, esp
0045B53D|.898424 5C0D00>mov   dword ptr , eax
0045B544|.8B8424 6C0D00>mov   eax, dword ptr
0045B54B|.53            push    ebx
0045B54C|.55            push    ebp
0045B54D|.8BAC24 700D00>mov   ebp, dword ptr
0045B554|.56            push    esi
0045B555|.894424 14   mov   dword ptr , eax
0045B559|.894C24 10   mov   dword ptr , ecx
0045B55D|.8D8424 640500>lea   eax, dword ptr
0045B564|.57            push    edi
0045B565|.894424 10   mov   dword ptr , eax
0045B569|.B9 31000000   mov   ecx, 31
0045B56E|.BE 701B6400   mov   esi, 00641B70
0045B573|.BF 60036C00   mov   edi, 006C0360
0045B578|.F3:A5         rep   movs dword ptr es:, dword p>
0045B57A|.33C0          xor   eax, eax
0045B57C|.66:3902       cmp   word ptr , ax
0045B57F|.C74424 20 000>mov   dword ptr , 400
0045B587|.8BCA          mov   ecx, edx
0045B589|.74 11         je      short 0045B59C
0045B58B|.EB 03         jmp   short 0045B590
0045B58D|   8D49 00       lea   ecx, dword ptr
0045B590|>83C1 02       /add   ecx, 2
0045B593|.83C0 01       |add   eax, 1
0045B596|.66:8339 00    |cmp   word ptr , 0
0045B59A|.^ 75 F4         \jnz   short 0045B590
0045B59C|>8D8C24 680900>lea   ecx, dword ptr
0045B5A3|.51            push    ecx
0045B5A4|.52            push    edx
0045B5A5|.E8 B688FDFF   call    00433E60
0045B5AA|.83C4 08       add   esp, 8
0045B5AD|.8D7424 24   lea   esi, dword ptr
0045B5B1|.8BD8          mov   ebx, eax
0045B5B3|.E8 A8FCFFFF   call    0045B260                         ;来到另一个新位置


这样前后文就前后呼应了
是因为从这里种下的瓜(得到了注册名,注册码)
后面才有后面结下的果(注册失败,报复人类)
所以如果这里返回1,就是注册版了
所以果断汇编修改这里:0045B530/$81EC 640D0000 sub   esp, 0D64                        ;从这里再下个断
mov al,1
ret这样上面就会显示License to字样了:
因为调用注册表键值 "CredentialK",它这个键值是加密的注册名和注册码的杂交产品,所以后面也就不会显示注册给谁了。

冥界3大法王 发表于 2019-8-13 10:48

本帖最后由 冥界3大法王 于 2019-8-13 11:30 编辑

接下来,我们从未注册字样入手
我们故技重施(winhex。。。)
76FC7B73    F3:A5         rep   movs dword ptr es:, dword p>; 断在这里1

堆栈中0019E45C   004B3301返回到 GSP5.004B3301 来自 GSP5.00527410 这里回车汇编窗口跟随
00527410/$833D 74C66B00>cmp   dword ptr , 0            ;这是段首,同样能看到
00527417|.75 33         jnz   short 0052744C
00527419|.6A 0A         push    0A                               ; /ResourceType = RT_RCDATA
0052741B|.68 80000000   push    80                               ; |ResourceName = 80
00527420|.6A 00         push    0                              ; |hModule = NULL
00527422|.FF15 34556300 call    dword ptr [<&KERNEL32.FindResour>; \FindResourceW
00527428|.50            push    eax                              ; /hResource
00527429|.6A 00         push    0                              ; |hModule = NULL
0052742B|.FF15 28556300 call    dword ptr [<&KERNEL32.LoadResour>; \LoadResource
00527431|.50            push    eax                              ; /hResource
00527432|.FF15 3C556300 call    dword ptr [<&KERNEL32.LockResour>; \LockResource
00527438|.83C0 02       add   eax, 2
0052743B|.A3 9C886B00   mov   dword ptr , eax
00527440|.C705 74C66B00>mov   dword ptr , 1
0052744A|.EB 05         jmp   short 00527451
0052744C|>A1 9C886B00   mov   eax, dword ptr
00527451|>8B4C24 04   mov   ecx, dword ptr
00527455|.0FB75424 08   movzx   edx, word ptr
0052745A|.56            push    esi
0052745B|.0FB73488      movzx   esi, word ptr
0052745F|.03F2          add   esi, edx
00527461|.E8 F87B0600   call    0058F05E
00527466|.8B4C24 14   mov   ecx, dword ptr
0052746A|.8B5424 10   mov   edx, dword ptr
0052746E|.8B40 04       mov   eax, dword ptr
00527471|.8B40 44       mov   eax, dword ptr
00527474|.51            push    ecx                              ; /Count
00527475|.52            push    edx                              ; |Buffer
00527476|.56            push    esi                              ; |RsrcID
00527477|.50            push    eax                              ; |hInst
00527478|.FF15 EC596300 call    dword ptr [<&USER32.LoadStringW>>; \LoadStringW
0052747E|.5E            pop   esi                              ;第2次来到这

我们可以尝试在
ds:=00000001
本地调用来自 004012AE, 004013BB, 004023F8, 004036AD, 0040370B, 004047B8, 00409A5F, 00409BFB, 0040EB02, 0040EBD6, 0040EC66, 0040F102, 0040F115, 00410340, 00410356, 00412087, 00412FA2, 00413492, 00413771, 00413827, 00413A11, 00413BE4, 0041607F, M)
这个地方ctrl+R,每个地址下断
ctrl+F2重启过后,12下F9后

我们来到这里,看到如下古怪字符
0019F5C0   006BCD18GSP5.006BCD18
0019F5C4   0045B0E4返回到 GSP5.0045B0E4 来自 GSP5.00527410
0019F5C8   0000001D
0019F5CC   00000053
0019F5D0   0019FA00UNICODE "21B59DK6EDMM2NQRQQQRNXW3"
0019F5D4   00000100
0019F5D8   0000001D
0019F5DC   00000052
0019F5E0   0019F700UNICODE "aHR0cHM6Ly9kcm0tbG9nZ2VyLmtleXByZXNzLmNvbS9rczE="


0045B0DF|.E8 2CC30C00   call    00527410
0045B0E4|.8D8424 380100>lea   eax, dword ptr
0045B0EB|.50            push    eax
0045B0EC|.8D4424 2C   lea   eax, dword ptr
0045B0F0|.E8 3B4C0700   call    004CFD30
0045B0F5|.83C4 24       add   esp, 24
0045B0F8|.85C0          test    eax, eax
0045B0FA|.75 18         jnz   short 0045B114
0045B0FC|>33C0          xor   eax, eax
0045B0FE|.5E            pop   esi
0045B0FF|.8B8C24 180600>mov   ecx, dword ptr
0045B106|.33CC          xor   ecx, esp
0045B108|.E8 9D2C1900   call    005EDDAA
0045B10D|.81C4 20060000 add   esp, 620
0045B113|.C3            retn
0045B114|>8B5424 08   mov   edx, dword ptr
0045B118|.8BC2          mov   eax, edx
0045B11A|.8D70 01       lea   esi, dword ptr
0045B11D|.8D49 00       lea   ecx, dword ptr
0045B120|>8A08          /mov   cl, byte ptr
0045B122|.83C0 01       |add   eax, 1
0045B125|.84C9          |test    cl, cl
0045B127|.^ 75 F7         \jnz   short 0045B120
0045B129|.8D4C24 04   lea   ecx, dword ptr
0045B12D|.51            push    ecx
0045B12E|.8D4C24 1C   lea   ecx, dword ptr
0045B132|.51            push    ecx
0045B133|.2BC6          sub   eax, esi
0045B135|.50            push    eax
0045B136|.52            push    edx
0045B137|.E8 94631800   call    005E14D0
0045B13C|.83C4 10       add   esp, 10
0045B13F|.85C0          test    eax, eax
0045B141|.^ 75 B9         jnz   short 0045B0FC
0045B143|.8B4424 04   mov   eax, dword ptr
0045B147|.3D 00010000   cmp   eax, 100
0045B14C|.^ 74 AE         je      short 0045B0FC
0045B14E|.6A 04         push    4
0045B150|.8D5424 1C   lea   edx, dword ptr
0045B154|.68 10696500   push    00656910                         ;ASCII "http"
0045B159|.52            push    edx
0045B15A|.C64404 24 00mov   byte ptr , 0
0045B15F|.E8 D7551900   call    005F073B                         ;这里看到https://drm-logger.keypress.com/ks1

这个之后不远的Call里就是咱们前面分析过的注册码所在位置
这个网页打开会看到
{"response":"Allow","responseReason":"","responseMessage":"","numComputers":0,"serverContactSuppression":0}
翻译下就知道了
响应
允许
响应原因
响应消息
数字计算机
服务器触点抑制
跟注册表中你的那个注册号的计算 有关
所以,刚才对 这个常量的定位也很关键。和C的分析基本合拍了,这个不用往下分析了。

https://static.52pojie.cn/static/image/hrline/2.gif

https://static.52pojie.cn/static/image/hrline/2.gif
下面再从a1功能限制入手加以研究,还是删除udd从头开始吧
因为这个论坛有人分析过了,我们全当是复习功课好了。
我们直接bp ShowWindow
这个下断需要点运气,不然会频繁的断下,下面是这次堆栈告诉我们的裙摆下情况:{:301_997:}
0019E234   73CDC19B/CALL 到 ShowWindow 来自 comctl32.73CDC195
0019E238   003C0A56|hWnd = 003C0A56 (class='tooltips_class32',parent=00500A06)
0019E23C   00000000\ShowState = SW_HIDE
0019E240   00000000
0019E244   00000401
0019E248   00B8AC68
0019E24C/0019E2F4ASCII "v4X"
0019E250|00580BA0返回到 GSP5.00580BA0======================》a1
0019E254|0000000F
0019E258|00000000
0019E25C|5006E937
0019E260|0019E274
0019E264|73CDC104返回到 comctl32.73CDC104 来自 comctl32.73CDC10E
0019E268|00000000
0019E26C|00000000
0019E270|00B8AC68
0019E274|0019E3B8
0019E278|73CDDFE7返回到 comctl32.73CDDFE7 来自 comctl32.73CDC0EE
0019E27C|00000000
0019E280|00B8AC9C
0019E284|00B8AC68
0019E288|003C0A56
0019E28C|00000000
0019E290|003C0A56
0019E294|00000000
0019E298|00000005
0019E29C|FFFFFFFF
0019E2A0|00000001
0019E2A4|746C6664
0019E2A8|746C6664
0019E2AC|00000000
0019E2B0|00B240A8
0019E2B4|00000040
0019E2B8|74746FECgdi32ful.74746FEC
0019E2BC|440124E0
0019E2C0|00B240A8
0019E2C4|00000000
0019E2C8|00000000
0019E2CC|00000000
0019E2D0|00000000
0019E2D4|00000000
0019E2D8|00000000
0019E2DC|006B0BD4GSP5.006B0BD4
0019E2E0|7FFFFFFF
0019E2E4|00000000
0019E2E8|0019E394
0019E2EC|00627843GSP5.00627843
0019E2F0|FFFFFFFF
0019E2F4\00583476返回到 GSP5.00583476 来自 GSP5.005F6F63======================》a2
0019E2F8   0057E78F返回到 GSP5.0057E78F======================》a3
0019E2FC   0000000F
0019E300   00000000
0019E304   0063EDB8GSP5.0063EDB8
0019E308   01400140
0019E30C   03B92150
0019E310   00000000
0019E314   0019E338
0019E318   0059918C返回到 GSP5.0059918C 来自 GSP5.0057E76D ======================》a4
0019E31C/0019E34C
0019E320|76C54889返回到 user32.76C54889 来自 user32.76C54930
0019E324|01400140
0019E328|00000000
0019E32C|01400140
0019E330|00480B10GSP5.00480B10 ======================》a5
0019E334|00000000
0019E338|0019E3A0
0019E33C|00000000
0019E340|000033FC
0019E344|00000000
0019E348|00480B10GSP5.00480B10 ======================》a6
0019E34C\0019E394

从a1 到 a6 你会首先 跟随哪个呢? {:301_971:}
都去看看,我觉得 你会选择0019E318   0059918C返回到 GSP5.0059918C 来自 GSP5.0057E76D
到达这里后,我们Ctrl+A分析,Ctrl-来到段首
最后经过几轮
我们来到了
004F8DC2   .F70485 005C65>test    dword ptr , 4                         ;这里有个测试判断条件,这个内存地址只会搜索到1处
修改这个655C00为01也同样是注册版
几种方法都是一级一级回溯,找到关键判断点,找到尝试修改影响后面的走位。

冥界3大法王 发表于 2019-8-14 11:13

Hmily 发表于 2019-8-14 10:41
为什么有那么多多余的图在最后,文章为什么不合并一起发布?

我想起来了,我开始用的IE浏览器
当传到第14张图时,论坛卡死了,所以重传了3次,所以最后三张重掉了
回来我又用了附件的传输方式(开始点的传图按钮)
以后不能再用这个了。关键时候掉链子

Raymond512 发表于 2019-8-13 11:07

你们都好厉害

mscsky 发表于 2019-8-13 11:25

打破0回复,大佬666

hdwlx 发表于 2019-8-13 11:56

大婶顶你上去,法力无边。

lionelin 发表于 2019-8-13 14:43

学习到了

byh3025 发表于 2019-8-13 14:45

法王分析的太厉害了,{:1_921:}

ALL_IN 发表于 2019-8-13 16:00

那么萌的么用草莓鼠标

cd_ll 发表于 2019-8-13 16:09

大佬很生动啊

a1545515 发表于 2019-8-13 16:12

哇塞大神好厉害
页: [1] 2 3
查看完整版本: 对"傻白甜1号样本"的逆向分析