先说明,文章没啥技术性,小Q看了
http://bbs.pediy.com/showthread.php?t=42250 壹只老虎的文章后
破解不完全,小Q在此补上,希望兄弟以后分析软件着重点
暗桩 在这里
00408E88 83FA 06 cmp edx,6
00408E8B 0F85 29020000 jnz 004090BA 修改为JMP
软件作者在6.0版吸取了经验 ,加入了文件完整性校验,让上面的修改没法进行
软件有提示,找字串:
Ultra String Reference, 条目 147
Address=0040C8F9
Disassembly=mov edx, 00523476
Text String=本软件已经损坏,无法运行,请尝试杀毒,如果没有病毒,请重新安装
================================================
0040C8D7 > \8B8D C8FEFFFF mov ecx, dword ptr [ebp-138] "lks"
0040C8DD . 8B81 A40B0000 mov eax, dword ptr [ecx+BA4]
0040C8E3 . 05 18FCFFFF add eax, -3E8
0040C8E8 . 3B85 C4FEFFFF cmp eax, dword ptr [ebp-13C] 看堆栈
0040C8EE . 74 3E je short 0040C92E------->以上是比较,明显这里修改是晚了!
0040C8F0 . 66:C785 DCFEF>mov word ptr [ebp-124], 110
以下是关键值
=================================================
堆栈 ss:[0012FD70]=0000E20D -------->修改前(重点)
eax=0000E20D
=================================================
堆栈 ss:[0012FD70]=00004B15 -------->修改后
eax=0000E20D
=================================================
对0012FD70处 设置硬件访问断点
0040C5A9 . 52 push edx
0040C5AA . E8 CD180000 call 0040DE7C--------->重点(跟进)
0040C5AF . 59 pop ecx
0040C5B0 . 8985 C4FEFFFF mov dword ptr [ebp-13C], eax
0040C5B6 . 8BC3 mov eax, ebx 最后一次中断访问
=================================================
call 0040DE7C:
------------------------------------------------------------------------------------
0040DF29 . E8 F2A00D00 call 004E8020
0040DF2E . 50 push eax ; /Arg3
0040DF2F . 56 push esi ; |Arg2 ---->文件头"MZP"
0040DF30 . 8B55 08 mov edx, dword ptr [ebp+8] ; | LKS 校检标志
0040DF33 . 52 push edx ; |Arg1
0040DF34 . E8 83FE0200 call 0043DDBC ; \屏录专家.0043DDBC -->所以这里重点(我们要比它早)
0040DF39 . 83C4 0C add esp, 0C ----> 在这里看到了,我们发现了变化值( 我的寄存器值出现00004B15 )也就是我们修改后的值
0040DF3C . 0FB7C8 movzx ecx, ax
0040DF3F . 894D CC mov dword ptr [ebp-34], ecx
0040DF42 . 6A 62 push 62 ; /Arg1 = 00000062
0040DF44 . E8 4BF40E00 call 004FD394 ; \屏录专家.004FD394
-------------------------------------------------------------------------------------
跟进:call 0043DDBC (以后数据不作讲解,很简单哈)
-------------------------------------------------------------------------------------
0043DDBC /$ 55 push ebp
0043DDBD |. 8BEC mov ebp, esp
0043DDBF |. 53 push ebx
0043DDC0 |. 56 push esi
0043DDC1 |. 57 push edi
0043DDC2 |. 8B75 0C mov esi, dword ptr [ebp+C]
0043DDC5 |. 8B7D 08 mov edi, dword ptr [ebp+8]
0043DDC8 |. 33DB xor ebx, ebx
0043DDCA |. 68 05800000 push 8005 ; /Arg2 = 00008005
0043DDCF |. 57 push edi ; |Arg1
0043DDD0 |. E8 FF1B0000 call 0043F9D4 ; \屏录专家.0043F9D4
0043DDD5 |. 83C4 08 add esp, 8
0043DDD8 |. 33C0 xor eax, eax
0043DDDA |. 3B45 10 cmp eax, dword ptr [ebp+10]
0043DDDD |. 73 23 jnb short 0043DE02
0043DDDF |> 0FB7D3 /movzx edx, bx
0043DDE2 |. C1FA 08 |sar edx, 8
0043DDE5 |. 33C9 |xor ecx, ecx
0043DDE7 |. 8A0E |mov cl, byte ptr [esi]
0043DDE9 |. 46 |inc esi
0043DDEA |. 33D1 |xor edx, ecx
0043DDEC |. 40 |inc eax
0043DDED |. C1E3 08 |shl ebx, 8
0043DDF0 |. 66:8B9497 9C0>|mov dx, word ptr [edi+edx*4+79C]
0043DDF8 |. 66:33D3 |xor dx, bx
0043DDFB |. 3B45 10 |cmp eax, dword ptr [ebp+10]
0043DDFE |. 8BDA |mov ebx, edx
0043DE00 |.^ 72 DD \jb short 0043DDDF
0043DE02 |> 0FB7C3 movzx eax, bx
0043DE05 |. 8987 AC0B0000 mov dword ptr [edi+BAC], eax
0043DE0B |. 8BC3 mov eax, ebx
0043DE0D |. 5F pop edi
0043DE0E |. 5E pop esi
0043DE0F |. 5B pop ebx
0043DE10 |. 5D pop ebp
0043DE11 \. C3 retn
=====================================================
0040DF39处看到eax edx ebx 要为正确值, 来个摸拟吧! 让软件认错人吧!
开始 ,找块空地
0043DE05 |. 8987 AC0B0000 mov dword ptr [edi+BAC], eax 修改: jmp 00521260
0043DE0B |. 8BC3 mov eax, ebx
0043DE0D |. 5F pop edi
0043DE0E |. 5E pop esi
0043DE0F |. 5B pop ebx
0043DE10 |. 5D pop ebp
0043DE11 \. C3 retn
00521260 处开始写代码
mov eax,0000E20D 压入没有修改正确值
mov edx,0000E20D 压入没有修改正确值
mov ebx,0000E20D 压入没有修改正确值
mov dword ptr [edi+BAC], eax 恢复原代码
jmp 0043DE0B 跳回去
哈哈,OK了,, 软件
成功地花了眼把你认错 ^_^,
本来不想公开的,不过也没啥大不了,学习下吧// 软件作者升级后再来挑战
给我加强点哈!
下次不公开了
下面引用kanxue老师的一句话: 加密与解密技术在相辅相成中不断发展,既没有无坚不摧的矛,也不会有坚不可摧的盾。一个不熟悉敌手的战士不会有太多的胜利机会,不熟悉解密技术的软件开发者,也很难开发出更加先进的保护技术。
修改文件呢,没有,
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法