2020欧洲杯官方投注-2020欧洲杯官方投注网址逆向集录_00_不一致程序OEP特征总括

天性1:VC链接器版本

工作要求要脱贰个VMP壳,小编是贰个向来没接触过脱壳的人。瞬间这种心情碰着的人相应都清楚!不可能硬着头皮找教程,7天看完了 《天草的壳的社会风气》尝试脱壳下面是本身的脱壳过程希望大拿多多指正!
1、筹划工具,FEID(查壳工具)、DIE(查壳工具)、LordPE(dump工具)、ImpRec(IAT修复工具)、UIF(IAT修复工具)、CFF(文件优化学工业具)、OD(吾爱破解专版 调试工具)
2、查壳 PEID
2020欧洲杯官方投注-2020欧洲杯官方投注网址 1 
区段展现是vmp1,看来是VMP壳编写语言依旧不能够分明上DIE
2020欧洲杯官方投注-2020欧洲杯官方投注网址 2 
显示编制程序语言是VC++的,VMP壳
3、开OD打算脱壳、OD设置如下
2020欧洲杯官方投注-2020欧洲杯官方投注网址 3

2020欧洲杯官方投注-2020欧洲杯官方投注网址 4

2020欧洲杯官方投注-2020欧洲杯官方投注网址 5 
张开进度到进口看下
2020欧洲杯官方投注-2020欧洲杯官方投注网址 6 
4、跑OEP
什么也卡不懂,然则没什么知道是VMP壳就好办,直接CTTiguanL+G  输入 VirtualProtect 下断 如下图(固然提醒未知,先在内存窗口找到 kernel32.dll代码段 进去后在转到就到了)
2020欧洲杯官方投注-2020欧洲杯官方投注网址 7 
F9跑起来,那是会段下
2020欧洲杯官方投注-2020欧洲杯官方投注网址 8 
注意NewProtect 这项 等于 PAGE_READONLY 是终止,不然一向F9 按慢点别跑飞了
2020欧洲杯官方投注-2020欧洲杯官方投注网址 9 
到0401000处看看,代码是或不是业已解码
2020欧洲杯官方投注-2020欧洲杯官方投注网址 10 
早已解码, 寻觅特征码 EB0B85F375078BC6C1E0100BF0
2020欧洲杯官方投注-2020欧洲杯官方投注网址 11 
那是OEP第八个CALL的尾巴,依据他找到OEP 
2020欧洲杯官方投注-2020欧洲杯官方投注网址 12 
OEP 就是 00a6f7c8,但是那才是第一步 那时候DUMP 是没用的 因为VMP加密了IAT 我们须要恢复生机他
5、还原IAT
甭管找贰个IAT调用函数跟一下,刚好OEP上边就有七个 FF25 型的IAT 调用,跟进去看下
2020欧洲杯官方投注-2020欧洲杯官方投注网址 13 
要么啥都看不懂,可是没什么 既然是调用IAT函数,料定会在某一每天调到真实函数地址去的 继续跟下边把全副跟的流水生产线贴上来
2020欧洲杯官方投注-2020欧洲杯官方投注网址 14 
2020欧洲杯官方投注-2020欧洲杯官方投注网址 15 
2020欧洲杯官方投注-2020欧洲杯官方投注网址 16 
2020欧洲杯官方投注-2020欧洲杯官方投注网址 17 
2020欧洲杯官方投注-2020欧洲杯官方投注网址 18 
那是全部工艺流程的实际上试行的代码 ,现在分析下
01059D91    53              push ebx                     爱慕情形
01059D92    66:0FB6DB       movzx bx,bl          垃圾代码
01059D96    66:BB 5D55      mov bx,0x555D   垃圾代码
01059D9A    BB 5AC27200     mov ebx,0072C25A   那才是最终对EBX操作所以上边两条都以没用的代码
00F3BBFF    8B9B 25697400   mov ebx,dword ptr ds:[ebx+0x746925]    总计地址
01196B98    8D9B 5071F632   lea ebx,dword ptr ds:[ebx+0x32F67150]  总计地址
00EA9FC2    871C24          xchg dword ptr ss:[esp],ebx   和栈顶交流,并还原EBX的原始值
00F9FC9D    C2 0400         retn 0x4                  还原EBX 并回到函数
这时候看下酒馆 栈顶现身真实函数的地方
<ignore_js_op>2020欧洲杯官方投注-2020欧洲杯官方投注网址 19 
00F9FC9D    C2 0400         retn 0x4       深入分析下那条指令的实施流程,先EIP=栈顶的值 也正是动真格的函数地址,栈顶+4+4 懂汇编的人就能开掘,栈顶+8的岗位保存是当下CALL的回到地址 那实践了那条指令后再次回到地址不是从未有过了么?因为那个IAT调用 没加密前是 FF25型的 也便是 jmp [????????] 所以没有须要回到地址 ,而调用那些IAT的时候 是有一个CALL的进CALL的时候就能够PUSH重回地址到库房,所以那一个IAT管理的很抢眼!推行完真实函数后直接就回去到调用IATCALL的底下继续实施了。
看图片发现 那一个CALL 上面有一条 RETN指令 看来那条 是VMP加上去的了,然而不用忽略了那条指令 因为那条指令很要紧,VMP在得到IAT地址的末尾RETN的地方 会随机JMP到代码他足够的RETN 上,并不完全部都以在壳段 所以那么些RETN 要留到最后管理。
再找一个FF25 型的IAT调用看看
2020欧洲杯官方投注-2020欧洲杯官方投注网址 20 
跟进去看下,上面是推行流程代码
00FB7DC7    90              nop
00FB7DC8    0FB7D6          movzx edx,si        垃圾代码
00FB7DCB    66:0FBED1       movsx dx,cl       垃圾代码
00FB7DCF    5A              pop edx                   出栈                
00FB7DD0    871424          xchg dword ptr ss:[esp],edx           交流栈顶的值,还原 EDX原始值
00FB7DD3    52              push edx                              尊敬蒙受
00FB7DD4    66:0FBED1       movsx dx,cl     垃圾
00FB7DD8    0FB7D6          movzx edx,si      垃圾
00FB7DDB    BA B7757D00     mov edx,007D75B7     总计地址
010DFDAD    8B92 3D036900   mov edx,dword ptr ds:[edx+0x69033D]    总括地址
0102B837    8D92 B52FE512   lea edx,dword ptr ds:[edx+0x12E52FB5]     总括地址
00EACB30    871424          xchg dword ptr ss:[esp],edx   函数实际地址给栈顶 并还原意况          
0115D36E    C2 0400         retn 0x4 
其一FF25 CALL 的第四行 有个POP  edx 而进这些CALL在此以前  有二个push edx ,能够看到 那个push edx 也是废品代码是 VMP本人丰盛上去的,看来VMP 会随机在上下 填充八个字节,在上头正是 PUSH 贰个寄放器,在下边正是 retn
找一个 FF15型的CALL看看
2020欧洲杯官方投注-2020欧洲杯官方投注网址 21 
跟进去看下流程
010B27B9    BE B34E6E0B     mov esi,0xB6E4EB3    垃圾代码
00EFFC5B    5E              pop esi               出栈
00EEB9B0    873424          xchg dword ptr ss:[esp],esi    调换栈顶的值,还原 ESI原始值
00F437BB    56              push esi   保存景况
00F8D827    BE 4B084800     mov esi,0048084B    总结地址
00FA55B3    8BB6 C005B900   mov esi,dword ptr ds:[esi+0xB905C0]  总括地址
010E8053    8DB6 3F68AD31   lea esi,dword ptr ds:[esi+0x31AD683F] 总括地址
00F44191    873424          xchg dword ptr ss:[esp],esi   真实函数地址给栈顶,还原遇到
0057A761    C3              retn 
第二行 pop esi  看来这几个CALL 的push esi 是废品指令了,但是 发掘那些是retn 为啥不是,retn 04 呢?因为这么些是 FF15 型调用,也等于 call [????????]  必要实施完后回来到call 上面继续施行
再找三个FF15型调用看看
2020欧洲杯官方投注-2020欧洲杯官方投注网址 22 
跟进去看下流程
00E77D14    90              nop
00E77D15    51              push ecx            保存情形              
00E77D16    66:F7D1         not cx           垃圾代码
00E77D19    8B4C24 04       mov ecx,dword ptr ss:[esp+0x4]    栈顶+4(调用CALL的回来地址)给ECX,
00FB7CFF    8D49 01         lea ecx,dword ptr ds:[ecx+0x1]   取 重返地址+1的值 给ECX
01013FB5    894C24 04       mov dword ptr ss:[esp+0x4],ecx  重新写入到重回处
01013FB9    B9 A1598A00     mov ecx,008A59A1 总括地址
010566B2    8B89 94C36C00   mov ecx,dword ptr ds:[ecx+0x6CC394] 总结地址
00E95200    8D89 19378077   lea ecx,dword ptr ds:[ecx+0x77803719] 计算地址
00FEA363    870C24          xchg dword ptr ss:[esp],ecx  真实函数地址给栈顶,还原情状       
010ABADE    C3              retn
那个 有一点不一样样啊,很粗大略 看调用CALL 的底下有一个 RETN啊,那若是常规返回程序还不得跑飞啊,VMP奇妙的采取 4 5 6三行代码 就消除了,那写壳的人正是脑洞大开啊!
怀有的IAT加密就这么完了呢??? NO  还应该有更脑洞大开的 往下看
2020欧洲杯官方投注-2020欧洲杯官方投注网址 23 
跟进去看看
0119D768    90              nop
0106B2C9    872C24          xchg dword ptr ss:[esp],ebp           交换栈顶的值,还原栈顶
00F3E26F    55              push ebp                              保存重临地址
00F3E270    F7D5            not ebp                               垃圾代码
00F3E272    50              push eax                              保存景况
00F3E273    B8 D41D4300     mov eax,00431DD4  总计地址
00F3E278    66:8BEB         mov bp,bx  垃圾代码
00F3E27B    8B80 41F7BE00   mov eax,dword ptr ds:[eax+0xBEF741]  总括地址
00F3E281    66:0F4FE8       cmovg bp,ax  垃圾代码
00F3E285    66:8BE8         mov bp,ax   垃圾代码
00F3E288    8D80 903F170C   lea eax,dword ptr ds:[eax+0xC173F90]  总结地址
00F3E28E    0FB7E8          movzx ebp,ax 垃圾代码
00F3E291    8BE8            mov ebp,eax     真实函数地址给 EBP
00F3E293    58              pop eax   还原 寄存器
011B5D71    C3              retn
那是在干啥吧?? 咋把实际函数地址 给了 EBP呢? 看调用处的底下 有一个call ebp 明白了吧 那是把   mov xx,[????????]  整成了一个CALL哦,再来看下货仓 调用处pop  EBP , CALL内 第2行 有把栈顶的值还原了,然后把函数的回来地址重新PUSH进去,这里管理的很抢眼,所有调用处的 pop ebp也是废物指令,那就完了???NO还应该有往下看
2020欧洲杯官方投注-2020欧洲杯官方投注网址 24 
跟进去看下
00E97E5D    90              nop
00E97E5E    0FBFDB          movsx ebx,bx  垃圾代码
010C1083    50              push eax                    保存际遇     
010C1084    8B4424 04       mov eax,dword ptr ss:[esp+0x4]      获取当前CALL的归来地址给EAX
00E2EB3F    8D40 01         lea eax,dword ptr ds:[eax+0x1]   获取当前CALL再次来到地址+1给EAX
00E2EB42    0F45DB          cmovne ebx,ebx    垃圾代码
00E2EB45    66:0FB6DB       movzx bx,bl  垃圾代码
00E2EB49    894424 04       mov dword ptr ss:[esp+0x4],eax  保存重回地址
00E2EB4D    B8 012C4300     mov eax,00432C01 计算地址
00E2EB52    66:0FBEDB       movsx bx,bl 垃圾代码
00E2EB56    66:8BDF         mov bx,di 垃圾代码
01170378    8B80 F58CC000   mov eax,dword ptr ds:[eax+0xC08CF5] 总括地址
0117037E    0FB7DC          movzx ebx,sp 垃圾代码
01170381    0F41DE          cmovno ebx,esi      垃圾代码
01170384    F6D7            not bh 垃圾代码
01170386    8D80 145A2C32   lea eax,dword ptr ds:[eax+0x322C5A14] 计算地址
0117038C    B3 85           mov bl,0x85 垃圾代码
0117038E    8ADE            mov bl,dh 垃圾代码
01170390    8BD8            mov ebx,eax   真实函数地址给 EBX              
01170392    0FBFC2          movsx eax,dx 垃圾代码
01170395    C6C4 E2         mov ah,0xE2 垃圾代码
01170398    0FC8            bswap eax             垃圾代码            
0117039A    58              pop eax      还原情形                    
0117039B    C3              retn
认真看 了地点的一部分,这里轻巧领悟了吧, 4 5 8行管理调用处的 下边 retn 的,函数是赢得 EBX的调用值的

 

 2020欧洲杯官方投注-2020欧洲杯官方投注网址 25

 

转载:

【BC++】 二进制特征:EB1066623AUDI32B2B484F4F4B90
【BC++】 OEP的率先个API调用是 GetModuleHandleA
【BC++】 IAT调用是 FF25形式的

6、用UIf 修复IAT 
7、用lodepe dump
8、用imprec 修复IAT
9、用cff 去掉壳段
由来VMP脱壳实现!

特征2:OEP

共计6种 IAT相关的拍卖,所以本身是 一边写脚本一边骂写 VMP壳的人,要不要这样坑啊,笔者要的脱的前后相继非常大 跑一回要 1个钟头,我也不记得本人跑了稍稍遍了!哎!说来都是泪,新手便是这么呀!非常的少说了下边贴上脚本!需求的协和去下!

c) VC6/E语言(通过解析,开掘两者特征一致,能够判明E语言和VC6完全一样)

【VC6】的OEP第一个API调用是GetVersion

【VB6】的OEP平衡仓库是 sub esp,0x4C

这个特征,会对分析程序起到一定的辅助功用,这里,并从未完全列出总体的主流程序,希望一得之见吧;

 

2020欧洲杯官方投注-2020欧洲杯官方投注网址 26

2020欧洲杯官方投注-2020欧洲杯官方投注网址 27

 2020欧洲杯官方投注-2020欧洲杯官方投注网址 28

【VC6】的OEP平衡仓库是 sub esp,0x58 或 sub esp,0x68或add esp, -0x5C

a0) VB5:

【Delphi】OEP下面是二个地点
【Delphi】OEP处 有5个CALL
【Delphi】OEP 5个CALL之后,全是0
【Delphi】OEP处第三个CALL有GetModuleHandleA调用
【Delphi】的IAT调用是 FF25形式的

【VB5】程序的IAT引用,都是FF15型的

【VB5】的OEP平衡商旅是 sub esp,0x54

2020欧洲杯官方投注-2020欧洲杯官方投注网址 29

2020欧洲杯官方投注-2020欧洲杯官方投注网址 30

2020欧洲杯官方投注-2020欧洲杯官方投注网址 31

2020欧洲杯官方投注-2020欧洲杯官方投注网址 32

 

 

本文由2020欧洲杯官方投注-2020欧洲杯官方投注网址发布于win7,转载请注明出处:2020欧洲杯官方投注-2020欧洲杯官方投注网址逆向集录_00_不一致程序OEP特征总括

相关阅读