shy88488 发表于 2011-9-3 13:10

UPX0.89脱壳+自校验解除 (要注册码和注册文件我不懂破解求点思路!)

【作者】shy88488
【工具】loadPE, Ollydbg,PEID,Import_REC 1.6
【平台】WINXP
【软件名称】桌面提醒精灵5.02(在多特上找到的)
【加壳方式】UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【声明】学习之用并无商业企图!
-----------------------------------
【内容】
一.脱壳

-------------PEID查壳------------
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
OD载入直接单步向下 不要让他会跳!到达
0086B038   /74 07            je short zmtxjl.0086B041
0086B03A   |8903             mov dword ptr ds:,eax
0086B03C   |83C3 04          add ebx,4
0086B03F^|EB D8            jmp short zmtxjl.0086B019;这个地方回跳了
0086B041   \FF96 60FB4600    call dword ptr ds:      ; 但是在这边F4不能断下来会飞掉(原因我也不知)
0086B047    8BAE 54FB4600    mov ebp,dword ptr ds:
0086B04D    8DBE 00F0FFFF    lea edi,dword ptr ds: ;在这个地方F4断下
0086B053    BB 00100000      mov ebx,1000


继续向下单步走!!
0086B075    58               pop eax
0086B076    61               popad
0086B077    8D4424 80      lea eax,dword ptr ss:
0086B07B    6A 00            push 0
0086B07D    39C4             cmp esp,eax
0086B07F^ 75 FA            jnz short zmtxjl.0086B07B
0086B081    83EC 80          sub esp,-80
0086B084- E9 3F55CFFF      jmp zmtxjl.005605C8;到达这边 在单步直接到达OEP

---------------jmp zmtxjl.005605C8 到达----------
005605C8    55               push ebp;跳到这里OEP
005605C9    8BEC             mov ebp,esp
005605CB    6A FF            push -1
005605CD    68 20B37E00      push zmtxjl.007EB320
005605D2    68 BC295600      push zmtxjl.005629BC
005605D7    64:A1 00000000   mov eax,dword ptr fs:
005605DD    50               push eax
005605DE    64:8925 00000000 mov dword ptr fs:,esp


loadPE脱壳!

import_REC 修复!没有无效指针!!!
点击程序! 程序一闪而过!自动退出了!!!说明程序存在自校验!!

接下来是解除自校验!

================================================
二.自校验解除
OD载入修复文件!在命令行直接下段bpx ExitProcess!!!(记住大小写区分)
Shief+F9运行!
-------------------------------------------
004FB575    FF15 F0425800    call dword ptr ds:[<&kernel32.ExitP>; kernel32.ExitProcess;断在这里!查看堆栈信息!
004FB57B    5D               pop ebp
004FB57C    C3               retn
-----------堆栈信息--------------------
0012FC80   004FB571dumped_.004FB571
0012FC84   00000000\ExitCode = 0
0012FC88/0012FCF4
0012FC8C|00432454返回到 dumped_.00432454 来自 dumped_.004CFC9D ;说明这个退出CALL由004CFC9D调过来的。并且004CFC9D可能是由00432454上面的某一个CALL到达的!
0012FC90|00000000

---------crtl+g 来到00432454-----------------
00432429    53               push ebx
0043242A    E8 50D80900      call dumped_.004CFC7F
0043242F    83C4 04          add esp,4
00432432    837D AC 00       cmp dword ptr ss:,0
00432436    0F84 07000000    je dumped_.00432443               ; 3
0043243C    B8 01000000      mov eax,1
00432441    EB 02            jmp short dumped_.00432445          ; 2
00432443    33C0             xor eax,eax
00432445    85C0             test eax,eax
00432447    0F84 0A000000    je dumped_.00432457               ; 跳过call dumped_.004CFC9D将他改成JNE 保存!!!
0043244D    6A 00            push 0
0043244F    E8 49D80900      call dumped_.004CFC9D;来到这边向上翻有三个跳
00432454    83C4 04          add esp,4

修改:

00432447    0F84 0A000000    je dumped_.00432457   ;将JE改成JNE 保存!!!   
运行新文件 依旧自动退出 ! MB还有自校验··

-------------载入新文件crtl+g 来到00432454 ------

00432447   /75 0E            jnz short dumped_.00432457          ; 修改过的 在此处下断 重新载入运行,在这边断下
00432449   |90               nop
0043244A   |90               nop
0043244B   |90               nop
0043244C   |90               nop
0043244D   |6A 00            push 0
0043244F   |E8 49D80900      call dumped_.004CFC9D
00432454   |83C4 04          add esp,4    ;这里到 向上翻
00432457   \E9 0C000000      jmp dumped_.00432468
0043245C    E9 00000000      jmp dumped_.00432461
---------------再下bpx ExitProcess断点Shief+F9 运行-------------------

004FB560    55               push ebp
004FB561    8BEC             mov ebp,esp
004FB563    8B45 08          mov eax,dword ptr ss:
004FB566    50               push eax
004FB567    B9 381D8200      mov ecx,dumped_.00821D38
004FB56C    E8 0F85FFFF      call dumped_.004F3A80
004FB571    8B4D 08          mov ecx,dword ptr ss:
004FB574    51               push ecx
004FB575    FF15 F0425800    call dword ptr ds:[<&kernel32.ExitP>; kernel32.ExitProcess;来到这边查看堆栈
004FB57B    5D               pop ebp
004FB57C    C3               retn
    -----------堆栈
0012FC88   004FB571dumped_.004FB571
0012FC8C   00000000\ExitCode = 0
0012FC90/0012FCF4
0012FC94|00432C99返回到 dumped_.00432C99 来自 dumped_.004CFC9D;到00432C99处看看
0012FC98|00000000
0012FC9C|0012FCB4
0012FCA0|00000001

----------------来到00432C99处----------
00432C88    33C0             xor eax,eax
00432C8A    85C0             test eax,eax
00432C8C    0F84 0A000000    je dumped_.00432C9C   ;跳过下面的CALL
00432C92    6A 00            push 0
00432C94    E8 04D00900      call dumped_.004CFC9D   ;CALL退出函数
00432C99    83C4 04          add esp,4
00432C9C    8B5D FC          mov ebx,dword ptr ss:
00432C9F    85DB             test ebx,ebx

--------- 修改
00432C8C    0F84 0A000000    je dumped_.00432C9C   ;将JE改成JNE,保存··

-------------运行程序----------
可以运行了@!!··呵呵··过程应该蛮详细的吧!
------------------接下来是关于破解的问题-----------------求解释----求思路-------


这个软件注册平破解有点难诶·竟然要注册码和注册文件···有点尴尬我没有碰过··求思路···

附上软件威盘下载地址http://www.vdisk.cn/down/index/8793719A3390


第一次发帖不知道有没有违规如有违规请版主指出!不要惩罚太狠!谢谢·

注册账户好难 发表于 2011-9-3 13:41

lz教程做的不错

期待大牛给思路吧

shy88488 发表于 2011-9-3 13:57

{:1_908:}晕死难道我的标题有点错误 没人来解决··

pwzh88 发表于 2011-9-3 13:48

第一次碰到这样的

mfkwgij 发表于 2011-9-3 15:17

是很好的了 支持了!~

guxiaokang 发表于 2011-9-3 16:01

cu629944 发表于 2011-9-3 17:29

UPX脱壳撒~能全部分析下好了~

cafardgg 发表于 2011-9-3 18:19

去自校验写的挺详细的,学习了,谢谢!

shy88488 发表于 2011-9-3 22:18

壳 是弄出来了·但是不会破解啊··求解释啊 ··这个软件的注册方法有点奇葩···求解小生进来看看啊··

老万 发表于 2011-9-4 07:27

大牛,帮忙分析一下吧
页: [1] 2
查看完整版本: UPX0.89脱壳+自校验解除 (要注册码和注册文件我不懂破解求点思路!)