xjun 发表于 2017-8-9 19:43

某高强度CM的简单分析

本帖最后由 xjun 于 2017-8-9 20:48 编辑

本人特此声明,此贴不针对任何人。
仅做技术交流.表达不好还请大牛拍砖。
一、初步分析
程序拿到手先拖入exeinfo 看看信息

从基本的PE信息来看 IAT表是完整的,资源表也是完整的。 我们在来拖入OD看看

入口点进来 直接解密程序的 .text 代码区段解密完之后跳向一段内存加载DLL的shellcode,这个DLL就是他的核心DLL,使用VMP全部加密了。并且兼容性比较差,我WIN10系统跑不起来,WIN7系统跑起来还随机卡死和崩溃现象,啥都没开呢 --!

-----------------------------------------------------------------------------------------------------------
我们此时跳向程序的代码领空发现程序已经解码了,并且各个地方调用IAT也正常,我们直接来到代码段分析.
1.       所有标记的代码段起始地址到结束地方都被抽取掉了,开始地址的地方都是int3,所以必定是利用异常跳转了。
2.       易语言按钮事件,易语言启窗事件,以及命令调用的地方,都把代码变形了
3.       入口点被抽取了,并且还在易语言几个内部的地方设置了暗坑
4.   我找到易语言 FF25 处,随便找了一个jmp跟了十几步,发现代码只是被简单的变形了,并且里面还时不时的有int3。

二、思路整理
1.       我们得还原OEP回去。
2.       还原他易语言内部的几个暗坑
3.       还原用户代码段int3 到正常的跳转 <- 这个是他模拟的jmp
4.       还原变形代码里面的int3 <-这里他用来模拟call (如何辨别jmp|all 看esp是否被减了4)
5.       整理变形的代码,还原变形代码
6.       验证分析与破解
三、开始还原         
1. 还原OEP            
我们来到0046BC53地址,找个易语言程序对照还原回去即可。

2.还原暗坑
从入口点开始我正常的跑过来,发现进入易语言启动事件的代码被retn掉了。

还有一处暗坑在启窗事件那

那么我是如何分析到 他这2处暗坑的呢? 因为我把OEP还原之后,连启窗事件都没跑完就蹦了,所以这中间必定有问题,然后你只要跟到那个call蹦了,一直这样跟进去,几次就出来了。
因为我对易语言程序比较熟悉,所以能区别哪些是易原体的 哪些是用户自写的代码。

3. 还原用户代码段的 int3被标记的变形代码

首先我们让他进程跑起来,断住KiUserExceptionDispatcher,设置EIP为int3地址代码,单步跟下,发现个VEH异常处理(也可以提取出他的DLL 用E-Debug2.0分析),这个时候我们先记录下他这个VEH异常处理子程序的地址,后面有用。
我们知道 从ff25 那里开始就是用户自学代码的结尾,从00401004开始是用户自写代码段开始.有了大小,我们首先来整理下全部的用户代码段int3 (就是jmp指令)
搜索 VA:00401004 - 00408FA7
第一种:
0040100C    55            push    ebp
0040100D    8BEC            mov   ebp, esp
0040100F    81EC 04000000   sub   esp, 0x4
00401015    CC            
int3搜索特征为 -> 81EC????????CC
第二种:
0040114F    55            push    ebp
00401150    8BEC            mov   ebp, esp
00401152    81EC 10000000   sub   esp, 0x10
00401158    C745 FC 0000000>mov   dword ptr , 0x0
0040115F    CC            int3                                 
搜索特征为 -> C745??????????CC
第三种:
004023BF    55            push    ebp
004023C0    8BEC            mov   ebp, esp
004023C2    CC            int3
搜索特征为 -> 558BECCC            

然后我们自己构造个EXCEPTION_POINTERS结构去call他的这个异常处理程序,我们还需要判断ESP是否被减了4,如果被减了4,这个int3模拟的就是call指令,并且里面带有返回地址。
DWORD GetAddr(DWORD dwInt3,DWORD *pushdata){      
EXCEPTION_POINTERS ExceptInfo;      
CONTEXT con = { 0 };   
   EXCEPTION_RECORD ex = { 0 };   
   ExceptInfo.ContextRecord = &con;      
ExceptInfo.ExceptionRecord = &ex;      
   char espbuf = { 0 };   
    ExceptInfo.ContextRecord->Esp = (DWORD)&espbuf;   
      ExceptInfo.ContextRecord->Eip = dwInt3;   
   ExceptInfo.ExceptionRecord->ExceptionAddress = (PVOID)dwInt3;   
    ExceptInfo.ExceptionRecord->ExceptionCode = 0x80000003;   
   ExceptInfo.ExceptionRecord->NumberParameters = 1;      
   pfnEVehHandle(&ExceptInfo);   
    memcpy(pushdata, espbuf, 4);   
    return ExceptInfo.ContextRecord->Eip;
}

效果如下


这样他的所有用户代码段的代码就被我们还原了,我们打印出MUltIMATE Assembler的格式,一键还原上去。一键还原上去以后在搜索一下用户代码段还存在int3有2个漏修情况,同理还原上去。

4.还原壳区段的int3 代码,当用户代码正常的jmp到变形的代码后,里面还有很多int3指令,这个指令是用来模拟call的


我们可以提取特征 CC420D0A 都是这个特征,如果没这个特征的话,我们也可以直接搜索CC来遍历。搜索出来后,我们也打印出MUltIMATE Assembler格式,一键还原上去。

至此,程序已经能脱离他的核心DLL 独立运行了。


5. 整理变形代码与还原

Push Imm32
jmp xxxxxxxx->还原为 call指令
----------------------------------------------------------------
mov r32,Imm
not r32   ->还原为 mov r32,xxxxx
-----------------------------------------------------------------
pushfd
push    eax
mov   eax, 0x1D022C
xor   eax, 0x76BB29
mov   eax, dword ptr
mov   dword ptr , 0xFE435F2A
xor   dword ptr , eax
not   dword ptr 此条指令可能存在
pop   eax
popfd
call    dword ptr -> 还原为 call指令
-----------------------------------------------------------------
mov   dword ptr , 0x7FFFFCFE
not   dword ptr
push    dword ptr -> 还原为push 指令
-----------------------------------------------------------------
push    ecx
mov   ecx, 0xFFB45D9B
not   ecx
mov   eax, dword ptr
pop   ecx         ->还原为mov r32,dword
-----------------------------------------------------------------
遇到 jmp short 短跳指令,直接进行下一条。
如果没有遗漏的话大概就这么多。
我使用BEA反汇编引擎 ,在加上以上的变形还原规则,
如下效果:
截图的时候。还原工具有BUG,但后面提供下载的还原工具是没有的。


基本已经可以完整的还原出来原始指令。
到这个时候,顺带把易语言的命令调用地方,按钮事件 启窗事件也一并还原了吧(你也可以参考其他易语言程序来还原)

6.验证的破解与分析
机器码部分:
0040776D    55            push    ebp
0040776E    8BEC            mov   ebp, esp
00407770    81EC 04000000   sub   esp, 0x4
00407776    E8 A79DFFFF   call    00401522                         ; <-- 取机器码
0040777B    8945 FC         mov   dword ptr , eax
0040777E    68 04000080   push    0x80000004
00407783    6A 00         push    0x0
00407785    8B45 FC         mov   eax, dword ptr
00407788    85C0            test    eax, eax
0040778A    0F85 05000000   jnz   <seg00>
00407790    B8 74D04800   mov   eax, 0048D074
00407795 >50            push    eax
00407796    6A 01         push    0x1
00407798    BB 40A44000   mov   ebx, <置剪辑板文本>
0040779D    E8 61180000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004077A2    83C4 10         add   esp, 0x10
004077A5    8B5D FC         mov   ebx, dword ptr
004077A8    85DB            test    ebx, ebx
004077AA    0F84 09000000   je      <seg01>
004077B0    53            push    ebx
004077B1    E8 41180000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004077B6    83C4 04         add   esp, 0x4
004077B9 >BB 06000000   mov   ebx, 0x6
004077BE    E8 4198FFFF   call    00401004
004077C3    68 01030080   push    0x80000301
004077C8    6A 00         push    0x0
004077CA    6A 00         push    0x0
004077CC    68 04000080   push    0x80000004
004077D1    6A 00         push    0x0
004077D3    68 25D24800   push    0048D225                         ; ASCII "已复制"
004077D8    6A 04         push    0x4
004077DA    BB D0A44000   mov   ebx, <信息框>
004077DF    E8 1F180000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004077E4    83C4 34         add   esp, 0x34
004077E7    8BE5            mov   esp, ebp
004077E9    5D            pop   ebp
004077EA    C3            retn


call    00401522 为主要取机器码地方
还原后进去看看

00401522    55            push    ebp
00401523    8BEC            mov   ebp, esp
00401525    81EC 24000000   sub   esp, 0x24
0040152B    C745 FC 0000000>mov   dword ptr , 0x0
00401532    C745 F8 0000000>mov   dword ptr , 0x0
00401539    C745 F4 0000000>mov   dword ptr , 0x0
00401540    6A 01         push    0x1
00401542    6A 00         push    0x0
00401544    6A 01         push    0x1
00401546    8D45 F8         lea   eax, dword ptr
00401549    50            push    eax
0040154A    6A 01         push    0x1
0040154C    8D45 FC         lea   eax, dword ptr
0040154F    50            push    eax
00401550    E8 85010000   call    004016DA   <-硬盘序列号
00401555    E8 A01B0000   call    004030FA   <- CPU制造厂商
0040155A    8945 F0         mov   dword ptr , eax
0040155D    E8 AE1C0000   call    00403210    <- CPU名称
00401562    8945 EC         mov   dword ptr , eax
00401565    E8 121E0000   call    0040337C   <- CPUID
0040156A    8945 E8         mov   dword ptr , eax
0040156D    E8 241F0000   call    00403496<- 计算机名
00401572    8945 E4         mov   dword ptr , eax
00401575    E8 F71F0000   call    00403571   <- 当前登录用户名
0040157A    8945 E0         mov   dword ptr , eax
0040157D    FF75 E0         push    dword ptr
00401580    68 75D04800   push    0048D075
00401585    FF75 E4         push    dword ptr
00401588    68 75D04800   push    0048D075
0040158D    FF75 F8         push    dword ptr
00401590    68 75D04800   push    0048D075
00401595    FF75 FC         push    dword ptr
00401598    68 75D04800   push    0048D075
0040159D    FF75 E8         push    dword ptr
004015A0    68 75D04800   push    0048D075
004015A5    FF75 EC         push    dword ptr
004015A8    68 75D04800   push    0048D075
004015AD    FF75 F0         push    dword ptr
004015B0    B9 0D000000   mov   ecx, 0xD
004015B5    E8 39FBFFFF   call    <文本相加>
004015BA    83C4 34         add   esp, 0x34
004015BD    8945 DC         mov   dword ptr , eax
004015C0    8B5D F0         mov   ebx, dword ptr
004015C3    85DB            test    ebx, ebx
004015C5    0F84 09000000   je      <seg00>
004015CB    53            push    ebx
004015CC    E8 267A0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004015D1    83C4 04         add   esp, 0x4
004015D4 >8B5D EC         mov   ebx, dword ptr
004015D7    85DB            test    ebx, ebx
004015D9    0F84 09000000   je      <seg01>
004015DF    53            push    ebx
004015E0    E8 127A0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004015E5    83C4 04         add   esp, 0x4
004015E8 >8B5D E8         mov   ebx, dword ptr
004015EB    85DB            test    ebx, ebx
004015ED    0F84 09000000   je      <seg02>
004015F3    53            push    ebx
004015F4    E8 FE790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004015F9    83C4 04         add   esp, 0x4
004015FC >8B5D E4         mov   ebx, dword ptr
004015FF    85DB            test    ebx, ebx
00401601    0F84 09000000   je      <seg03>
00401607    53            push    ebx
00401608    E8 EA790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
0040160D    83C4 04         add   esp, 0x4
00401610 >8B5D E0         mov   ebx, dword ptr
00401613    85DB            test    ebx, ebx
00401615    0F84 09000000   je      <seg04>
0040161B    53            push    ebx
0040161C    E8 D6790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
00401621    83C4 04         add   esp, 0x4
00401624 >8B45 DC         mov   eax, dword ptr
00401627    50            push    eax
00401628    8B5D F4         mov   ebx, dword ptr
0040162B    85DB            test    ebx, ebx
0040162D    0F84 09000000   je      <seg05>
00401633    53            push    ebx
00401634    E8 BE790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
00401639    83C4 04         add   esp, 0x4
0040163C >58            pop   eax
0040163D    8945 F4         mov   dword ptr , eax
00401640    68 04000080   push    0x80000004
00401645    6A 00         push    0x0
00401647    8B45 F4         mov   eax, dword ptr
0040164A    85C0            test    eax, eax
0040164C    0F85 05000000   jnz   <seg06>
00401652    B8 74D04800   mov   eax, 0048D074
00401657 >50            push    eax
00401658    6A 01         push    0x1
0040165A    BB 809D4000   mov   ebx, <到字节集>
0040165F    E8 9F790000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
00401664    83C4 10         add   esp, 0x10
00401667    8945 F0         mov   dword ptr , eax
0040166A    68 05000080   push    0x80000005
0040166F    6A 00         push    0x0
00401671    8B45 F0         mov   eax, dword ptr
00401674    85C0            test    eax, eax
00401676    0F85 05000000   jnz   <seg07>
0040167C    B8 77D04800   mov   eax, 0048D077
00401681 >50            push    eax
00401682    6A 01         push    0x1
00401684    B8 02000000   mov   eax, 0x2
00401689    BB 50824600   mov   ebx, <取数据摘要>
0040168E    E8 7C790000   call    0040900F                         ; jmp to <WH本地验.三方库命令调用>
00401693    83C4 10         add   esp, 0x10
00401696    8945 EC         mov   dword ptr , eax
00401699    8B5D F0         mov   ebx, dword ptr
0040169C    85DB            test    ebx, ebx
0040169E    0F84 09000000   je      <seg08>
004016A4    53            push    ebx
004016A5    E8 4D790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004016AA    83C4 04         add   esp, 0x4
004016AD >8B45 EC         mov   eax, dword ptr
004016B0    E9 00000000   jmp   <seg09>
004016B5 >50            push    eax
004016B6    8B5D FC         mov   ebx, dword ptr
004016B9    85DB            test    ebx, ebx
004016BB    0F84 09000000   je      <seg10>
004016C1    53            push    ebx
004016C2    E8 30790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004016C7    83C4 04         add   esp, 0x4
004016CA >8B5D F8         mov   ebx, dword ptr
004016CD    85DB            test    ebx, ebx
004016CF    0F84 09000000   je      <seg11>
004016D5    53            push    ebx
004016D6    E8 1C790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004016DB    83C4 04         add   esp, 0x4
004016DE >8B5D F4         mov   ebx, dword ptr
004016E1    85DB            test    ebx, ebx
004016E3    0F84 09000000   je      <seg12>
004016E9    53            push    ebx
004016EA    E8 08790000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004016EF    83C4 04         add   esp, 0x4
004016F2 >58            pop   eax
004016F3    8BE5            mov   esp, ebp
004016F5    5D            pop   ebp
004016F6    C3            retn

机器码 =MD5(硬盘序列号 + CPU制造商 + CPU名称 + CPUID + 计算机名 + 当前登录用户)
这个就是机器码

验证部分:
0040114F    55            push    ebp
00401150    8BEC            mov   ebp, esp
00401152    81EC 10000000   sub   esp, 0x10
00401158    C745 FC 0000000>mov   dword ptr , 0x0
0040115F    6A 00         push    0x0
00401161    6A 01         push    0x1
00401163    6A FF         push    -0x1
00401165    6A 06         push    0x6
00401167    68 35000116   push    0x16010035
0040116C    68 01000152   push    0x52010001
00401171    E8 937E0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
00401176    83C4 18         add   esp, 0x18
00401179    E8 A4030000   call    00401522
0040117E    8945 F8         mov   dword ptr , eax
00401181    6A FF         push    -0x1
00401183    6A 08         push    0x8
00401185    68 34000116   push    0x16010034
0040118A    68 01000152   push    0x52010001
0040118F    E8 8D7E0000   call    00409021                         ; jmp to <WH本地验.获取窗口组件内容>
00401194    83C4 10         add   esp, 0x10
00401197    8945 F4         mov   dword ptr , eax
0040119A    8D45 F4         lea   eax, dword ptr
0040119D    50            push    eax
0040119E    8D45 F8         lea   eax, dword ptr
004011A1    50            push    eax
004011A2    E8 A5240000   call    0040364C
004011A7    8945 F0         mov   dword ptr , eax
004011AA    8B5D F8         mov   ebx, dword ptr
004011AD    85DB            test    ebx, ebx
004011AF    0F84 09000000   je      <seg00>
004011B5    53            push    ebx
004011B6    E8 3C7E0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004011BB    83C4 04         add   esp, 0x4
004011BE >8B5D F4         mov   ebx, dword ptr
004011C1    85DB            test    ebx, ebx
004011C3    0F84 09000000   je      <seg01>
004011C9    53            push    ebx
004011CA    E8 287E0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004011CF    83C4 04         add   esp, 0x4
004011D2 >8B45 F0         mov   eax, dword ptr
004011D5    8945 FC         mov   dword ptr , eax
004011D8    837D FC 00      cmp   dword ptr , 0x0
004011DC    0F85 A0000000   jnz   <seg02>
004011E2    6A 00         push    0x0
004011E4    6A 00         push    0x0
004011E6    6A FF         push    -0x1
004011E8    6A 06         push    0x6
004011EA    68 39000116   push    0x16010039
004011EF    68 01000152   push    0x52010001
004011F4    E8 107E0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
004011F9    83C4 18         add   esp, 0x18
004011FC    6A 00         push    0x0
004011FE    6A 00         push    0x0
00401200    6A FF         push    -0x1
00401202    6A 06         push    0x6
00401204    68 3B000116   push    0x1601003B
00401209    68 01000152   push    0x52010001
0040120E    E8 F67D0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
00401213    83C4 18         add   esp, 0x18
00401216    6A 00         push    0x0
00401218    6A 00         push    0x0
0040121A    6A FF         push    -0x1
0040121C    6A 06         push    0x6
0040121E    68 3C000116   push    0x1601003C
00401223    68 01000152   push    0x52010001
00401228    E8 DC7D0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
0040122D    83C4 18         add   esp, 0x18
00401230    6A 00         push    0x0
00401232    6A 00         push    0x0
00401234    6A FF         push    -0x1
00401236    6A 06         push    0x6
00401238    68 74050116   push    0x16010574
0040123D    68 01000152   push    0x52010001
00401242    E8 C27D0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
00401247    83C4 18         add   esp, 0x18
0040124A    BB 06000000   mov   ebx, 0x6
0040124F    E8 B0FDFFFF   call    00401004
00401254    68 01030080   push    0x80000301
00401259    6A 00         push    0x0
0040125B    6A 00         push    0x0
0040125D    68 04000080   push    0x80000004
00401262    6A 00         push    0x0
00401264    68 04D04800   push    0048D004                         ; ASCII "验证成功"
00401269    6A 04         push    0x4
0040126B    BB D0A44000   mov   ebx, <信息框>
00401270    E8 8E7D0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
00401275    83C4 34         add   esp, 0x34
00401278    E9 60020000   jmp   <seg03>
0040127D    E9 41020000   jmp   <seg04>
00401282 >837D FC FF      cmp   dword ptr , -0x1
00401286    0F85 33000000   jnz   <seg05>
0040128C    BB 06000000   mov   ebx, 0x6
00401291    E8 6EFDFFFF   call    00401004
00401296    68 01030080   push    0x80000301
0040129B    6A 00         push    0x0
0040129D    6A 00         push    0x0
0040129F    68 04000080   push    0x80000004
004012A4    6A 00         push    0x0
004012A6    68 0DD04800   push    0048D00D                         ; ASCII "机器码或注册码不符合长度"
004012AB    6A 04         push    0x4
004012AD    BB D0A44000   mov   ebx, <信息框>
004012B2    E8 4C7D0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004012B7    83C4 34         add   esp, 0x34
004012BA    E9 04020000   jmp   <seg04>
004012BF >837D FC FE      cmp   dword ptr , -0x2
004012C3    0F85 33000000   jnz   <seg06>
004012C9    BB 06000000   mov   ebx, 0x6
004012CE    E8 31FDFFFF   call    00401004
004012D3    68 01030080   push    0x80000301
004012D8    6A 00         push    0x0
004012DA    6A 00         push    0x0
004012DC    68 04000080   push    0x80000004
004012E1    6A 00         push    0x0
004012E3    68 26D04800   push    0048D026                         ; ASCII "请检测网络"
004012E8    6A 04         push    0x4
004012EA    BB D0A44000   mov   ebx, <信息框>
004012EF    E8 0F7D0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004012F4    83C4 34         add   esp, 0x34
004012F7    E9 C7010000   jmp   <seg04>
004012FC >837D FC FD      cmp   dword ptr , -0x3
00401300    0F85 33000000   jnz   <seg07>
00401306    BB 06000000   mov   ebx, 0x6
0040130B    E8 F4FCFFFF   call    00401004
00401310    68 01030080   push    0x80000301
00401315    6A 00         push    0x0
00401317    6A 00         push    0x0
00401319    68 04000080   push    0x80000004
0040131E    6A 00         push    0x0
00401320    68 31D04800   push    0048D031                         ; ASCII "验证失败"
00401325    6A 04         push    0x4
00401327    BB D0A44000   mov   ebx, <信息框>
0040132C    E8 D27C0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
00401331    83C4 34         add   esp, 0x34
00401334    E9 8A010000   jmp   <seg04>
00401339 >837D FC FC      cmp   dword ptr , -0x4
0040133D    0F85 33000000   jnz   <seg08>
00401343    BB 06000000   mov   ebx, 0x6
00401348    E8 B7FCFFFF   call    00401004
0040134D    68 01030080   push    0x80000301
00401352    6A 00         push    0x0
00401354    6A 00         push    0x0
00401356    68 04000080   push    0x80000004
0040135B    6A 00         push    0x0
0040135D    68 3AD04800   push    0048D03A                         ; ASCII "网络超时"
00401362    6A 04         push    0x4
00401364    BB D0A44000   mov   ebx, <信息框>
00401369    E8 957C0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
0040136E    83C4 34         add   esp, 0x34
00401371    E9 4D010000   jmp   <seg04>
00401376 >837D FC FB      cmp   dword ptr , -0x5
0040137A    0F85 33000000   jnz   <seg09>
00401380    BB 06000000   mov   ebx, 0x6
00401385    E8 7AFCFFFF   call    00401004
0040138A    68 01030080   push    0x80000301
0040138F    6A 00         push    0x0
00401391    6A 00         push    0x0
00401393    68 04000080   push    0x80000004
00401398    6A 00         push    0x0
0040139A    68 43D04800   push    0048D043                         ; ASCII "注册码已过期"
0040139F    6A 04         push    0x4
004013A1    BB D0A44000   mov   ebx, <信息框>
004013A6    E8 587C0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004013AB    83C4 34         add   esp, 0x34
004013AE    E9 10010000   jmp   <seg04>
004013B3 >837D FC FA      cmp   dword ptr , -0x6
004013B7    0F85 33000000   jnz   <seg10>
004013BD    BB 06000000   mov   ebx, 0x6
004013C2    E8 3DFCFFFF   call    00401004
004013C7    68 01030080   push    0x80000301
004013CC    6A 00         push    0x0
004013CE    6A 00         push    0x0
004013D0    68 04000080   push    0x80000004
004013D5    6A 00         push    0x0
004013D7    68 50D04800   push    0048D050                         ; ASCII "机器码不符合"
004013DC    6A 04         push    0x4
004013DE    BB D0A44000   mov   ebx, <信息框>
004013E3    E8 1B7C0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004013E8    83C4 34         add   esp, 0x34
004013EB    E9 D3000000   jmp   <seg04>
004013F0 >837D FC F9      cmp   dword ptr , -0x7
004013F4    0F85 33000000   jnz   <seg11>
004013FA    BB 06000000   mov   ebx, 0x6
004013FF    E8 00FCFFFF   call    00401004
00401404    68 01030080   push    0x80000301
00401409    6A 00         push    0x0
0040140B    6A 00         push    0x0
0040140D    68 04000080   push    0x80000004
00401412    6A 00         push    0x0
00401414    68 5DD04800   push    0048D05D                         ; ASCII "禁止试用"
00401419    6A 04         push    0x4
0040141B    BB D0A44000   mov   ebx, <信息框>
00401420    E8 DE7B0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
00401425    83C4 34         add   esp, 0x34
00401428    E9 96000000   jmp   <seg04>
0040142D >68 01030080   push    0x80000301
00401432    6A 00         push    0x0
00401434    FF75 FC         push    dword ptr
00401437    6A 01         push    0x1
00401439    BB 30A34000   mov   ebx, <到文本>
0040143E    E8 C07B0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
00401443    83C4 10         add   esp, 0x10
00401446    8945 F8         mov   dword ptr , eax
00401449    FF75 F8         push    dword ptr
0040144C    68 66D04800   push    0048D066                         ; ASCII "错误返回值0x:"
00401451    B9 02000000   mov   ecx, 0x2
00401456    E8 98FCFFFF   call    <文本相加>
0040145B    83C4 08         add   esp, 0x8
0040145E    8945 F4         mov   dword ptr , eax
00401461    8B5D F8         mov   ebx, dword ptr
00401464    85DB            test    ebx, ebx
00401466    0F84 09000000   je      <seg12>
0040146C    53            push    ebx
0040146D    E8 857B0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
00401472    83C4 04         add   esp, 0x4
00401475 >BB 06000000   mov   ebx, 0x6
0040147A    E8 85FBFFFF   call    00401004
0040147F    68 01030080   push    0x80000301
00401484    6A 00         push    0x0
00401486    6A 00         push    0x0
00401488    68 04000080   push    0x80000004
0040148D    6A 00         push    0x0
0040148F    8B45 F4         mov   eax, dword ptr
00401492    85C0            test    eax, eax
00401494    0F85 05000000   jnz   <seg13>
0040149A    B8 74D04800   mov   eax, 0048D074
0040149F >50            push    eax
004014A0    6A 04         push    0x4
004014A2    BB D0A44000   mov   ebx, <信息框>
004014A7    E8 577B0000   call    00409003                         ; jmp to <WH本地验.核心库命令调用>
004014AC    83C4 34         add   esp, 0x34
004014AF    8B5D F4         mov   ebx, dword ptr
004014B2    85DB            test    ebx, ebx
004014B4    0F84 09000000   je      <seg04>
004014BA    53            push    ebx
004014BB    E8 377B0000   call    00408FF7                         ; jmp to <WH本地验.内存释放>
004014C0    83C4 04         add   esp, 0x4
004014C3 >6A 00         push    0x0
004014C5    6A 00         push    0x0
004014C7    6A FF         push    -0x1
004014C9    6A 06         push    0x6
004014CB    68 35000116   push    0x16010035
004014D0    68 01000152   push    0x52010001
004014D5    E8 2F7B0000   call    00409009                         ; jmp to <WH本地验.设置窗口组件内容>
004014DA    83C4 18         add   esp, 0x18
004014DD >8BE5            mov   esp, ebp
004014DF    5D            pop   ebp
004014E0    C3            retn

004011A2    E8 A5240000   call    0040364C <-就是验证的call了 直接让他返回0 就可以通过。
其他几个按钮就会禁止=假 了。
后面他有个解密数据的命令,因为没有一组正确注册码的原因,玩到后面解不开被加密的 PE文件。 他后面应该是把这个文件给内存加载了弹出破解成功的信息。就是对应的 初始化和开启HOME
其他几个验证功能按钮 就是读几个全局变量,该Patch的都Patch了。

PS:临时写的还原工具已经基本可以还原出全部指令了,但BUG肯定有,而且只针对此类程序有效。所以用出问题别找我,别找我,别找我。重要的话说三遍。 ^ _^ .



还原工具与视频:http://pan.baidu.com/s/1hr9Ht9i

Sound 发表于 2017-8-11 15:15

回帖内容讨论归讨论 再次重申 5: 本版禁止点将,挑衅,侮辱 等言辞。

chimaodeshu 发表于 2017-8-10 00:04

哈哈 分析倒是差不多 下次再次在吾爱发CM时 就不会让你标题打简单分析了

这个加密代码只是很简单的静态而且 复杂的加密思路已经有 但完全没时间写

但是方法用的好 你脱壳修复 也还是解密不出最终PE

给你个正版注册码 你能算出来也正常 我就算加你觉得很吊的VMP壳 也一样可以逆 只是时间问题

你说他垃圾 对于某些人来说 比VMP还难 你让一个破过VMP exe的人来脱这个壳未必他能脱

用最简单的方法 就是最好的方法 这个壳漏洞我知道 算出JMP跳转地址 差不多就可以完成脱离DLL的步骤了

我有个思路 代码模拟执行的思路 {:1_934:} 完成后 不会让你这么简单分析的

最后的最后 我肯定也知道你一定破不到验证 所以你要正版注册码破解?不存在滴,8字节长度的密钥 普通电脑可能要算几个月时间




Pizza 发表于 2017-8-10 00:38

chimaodeshu 发表于 2017-8-10 00:04
哈哈 分析倒是差不多 下次再次在吾爱发CM时 就不会让你标题打简单分析了

这个加密代码只是很简单的静态 ...

小兄弟你是真不知天高地厚吧 会逆vmp的完虐这种程度的加密

panzb88 发表于 2017-8-10 09:51

看到楼主的帖子,虽然我都没看懂但是我很感兴趣,但是无从下手,本人对计算机语言这方面0基础,想问问楼主如果想学习破解这些,就好比楼主作出这样的分析,需要学习什么?我现在无从下手,不知道先从什么开始再到什么,是不是要先学习语言java或者c或者c+那些先,楼主推荐我怎么学,先从哪再到哪,希望楼主回答我,谢谢您,本人今年270基础~

chimaodeshu 发表于 2017-8-10 15:03

八子节要多久? 这么无知的点评也好意思发出来 256的八次方 你给我用你电脑解个我看看 我就用一层加密 你都要解好久 无脑

zbnysjwsnd8 发表于 2017-8-9 19:54

支持一下
对了
师傅你看看你的排版。。乱套了

zhengpengxin 发表于 2017-8-9 19:57

太难啦哈哈

2217936322 发表于 2017-8-9 20:15

Crack-L 发表于 2017-8-9 20:31

xjun师傅就6   ..

吓死宝宝了 发表于 2017-8-9 20:53

糊里糊涂的哈哈哈

七宗罪丶 发表于 2017-8-9 20:53

膜拜师傅 这操作我一年都学不会

MiLanX 发表于 2017-8-9 21:28

厉害厉害

michaelnin 发表于 2017-8-9 22:53

我先保存,抽空学习一下,呵呵!
页: [1] 2 3 4
查看完整版本: 某高强度CM的简单分析