吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5929|回复: 0
收起左侧

[分享] KRYPTON脱壳BY CCDebuger

[复制链接]
wgz001 发表于 2009-4-21 07:10
 
一、OEP:

不忽略所有异常,用异常计数器插件先第一步计数,程序运行起来后CTR+F2重新载入程序,用异常计数器选第二步:带我到 OEP,当程序暂停时,ALT+M 打开内存,在代码段上按 F2 设断点,再回到反汇编窗口,按 SHIF+F9,断下来的时候往下看一下:

004E3A58    8B95 B6BB4100   MOV EDX,DWORD PTR SS:[EBP+41BBB6]
004E3A5E    FFE2            JMP EDX                                  ; 跳到 OEP
004E3A60    51              PUSH ECX
004E3A61    836C24 04 06    SUB DWORD PTR SS:[ESP+4],6

那个 JMP EDX 就是跳到 OEP 的。在这条命令上设断,F9,再按 F8,就到 OEP 了:

00401000    6A 00           PUSH 0                                   ; OEP
00401002    E8 C1100000     CALL 004020C8
00401007    A3 583B4000     MOV DWORD PTR DS:[403B58],EAX
--------------------------------------------------------------------------------------------------
二、输入表:
到 OEP 后,右键选择“分析->从模块中删除分析”,随便找个 API 调用看看,可以知道输入表加密了:

004020C8  - FF25 04D14100   JMP DWORD PTR DS:[41D104]                ; 输入表被加密了
004020CE  - FF25 0CD14100   JMP DWORD PTR DS:[41D10C]
004020D4  - FF25 10D14100   JMP DWORD PTR DS:[41D110]
004020DA  - FF25 14D14100   JMP DWORD PTR DS:[41D114]
--------------------------------------------------------------------------------------------------
现在 CTR+F2 重新载入程序,为方便调试,忽略所有异常。定位到数据窗口,CTR+G 转到我们前面看到的地址 41D104,设内存写入断点。一直按 F9,当断下来看到如下代码时就看到处理输入表的部分了:
--------------------------------------------------------------------------------------------------
004E311F    8907            MOV DWORD PTR DS:[EDI],EAX               ; 获取的函数地址送到输入表中的相关位置。如果前面没NOP,这里会加密
004E3121    EB 45           JMP SHORT 004E3168
004E3123    DF69 4E         FILD QWORD PTR DS:[ECX+4E]
004E3126    58              POP EAX
--------------------------------------------------------------------------------------------------
删除内存断点,一路 F8 跟跟看:

004E2812    8B95 2C784000   MOV EDX,DWORD PTR SS:[EBP+40782C]        ; 处理输入表
004E2818    8B06            MOV EAX,DWORD PTR DS:[ESI]
004E281A    0BC0            OR EAX,EAX
004E281C    75 03           JNZ SHORT 004E2821
004E281E    8B46 10         MOV EAX,DWORD PTR DS:[ESI+10]
004E2821    03C2            ADD EAX,EDX                              ; 基址+输入表函数RVA
004E2823    0385 1C784000   ADD EAX,DWORD PTR SS:[EBP+40781C]
004E2829    8B18            MOV EBX,DWORD PTR DS:[EAX]
004E282B    8B7E 10         MOV EDI,DWORD PTR DS:[ESI+10]
004E282E    03FA            ADD EDI,EDX
004E2830    03BD 1C784000   ADD EDI,DWORD PTR SS:[EBP+40781C]
004E2836    85DB            TEST EBX,EBX
004E2838    0F84 B9090000   JE 004E31F7
004E283E    F7C3 00000011   TEST EBX,11000000
004E2844    75 2A           JNZ SHORT 004E2870
004E2846    F7C3 00000080   TEST EBX,80000000
004E284C    75 22           JNZ SHORT 004E2870
004E284E    03DA            ADD EBX,EDX
004E2850    83C3 02         ADD EBX,2
004E2853    813B 46617461   CMP DWORD PTR DS:[EBX],61746146
004E2859    75 0D           JNZ SHORT 004E2868
004E285B    817B 04 6C45786>CMP DWORD PTR DS:[EBX+4],6978456C
004E2862    0F84 8F090000   JE 004E31F7
004E2868    899D 6F714000   MOV DWORD PTR SS:[EBP+40716F],EBX
004E286E    EB 17           JMP SHORT 004E2887
004E2870    90              NOP
004E2871    90              NOP
004E2872    81EB 00000011   SUB EBX,11000000
004E2878    C1CB 03         ROR EBX,3
004E287B    C785 6F714000 0>MOV DWORD PTR SS:[EBP+40716F],0
004E2885   /EB 11           JMP SHORT 004E2898
004E2887   |90              NOP
004E2888   |90              NOP
004E2889   |C00B 02         ROR BYTE PTR DS:[EBX],2
004E288C   |43              INC EBX
004E288D   |803B 00         CMP BYTE PTR DS:[EBX],0
004E2890  ^|75 F5           JNZ SHORT 004E2887
004E2892   |8B9D 6F714000   MOV EBX,DWORD PTR SS:[EBP+40716F]
004E2898   \90              NOP
004E2899    81E3 FFFFFF0F   AND EBX,0FFFFFFF
004E289F    53              PUSH EBX
004E28A0    FFB5 18784000   PUSH DWORD PTR SS:[EBP+407818]
004E28A6    FF95 50BE4100   CALL DWORD PTR SS:[EBP+41BE50]
004E28AC    83BD 6F714000 0>CMP DWORD PTR SS:[EBP+40716F],0
004E28B3    74 13           JE SHORT 004E28C8
004E28B5    8B8D 6F714000   MOV ECX,DWORD PTR SS:[EBP+40716F]        ; 解码后的输入表函数ASCII字串
004E28BB    90              NOP
004E28BC    90              NOP
004E28BD    90              NOP
004E28BE    D221            SHL BYTE PTR DS:[ECX],CL                 ; 继续加密原来的函数ASCII字串
004E28C0    3001            XOR BYTE PTR DS:[ECX],AL
004E28C2    41              INC ECX
004E28C3    8039 00         CMP BYTE PTR DS:[ECX],0
004E28C6  ^ 75 F3           JNZ SHORT 004E28BB
004E28C8    0BC0            OR EAX,EAX
004E28CA  ^ 0F84 CADFFFFF   JE 004E089A
004E28D0    EB 44           JMP SHORT 004E2916
--------------------------------------------------------------------------------------------------
004E29AF    8985 96714000   MOV DWORD PTR SS:[EBP+407196],EAX        ; 保存获取的输入表函数地址
004E29B5    EB 45           JMP SHORT 004E29FC
004E29B7    DF69 4E         FILD QWORD PTR DS:[ECX+4E]
004E29BA    58              POP EAX
--------------------------------------------------------------------------------------------------
004E30D5    8B85 A6714000   MOV EAX,DWORD PTR SS:[EBP+4071A6]        ; 加密输入表的,NOP掉
004E30DB    EB 38           JMP SHORT 004E3115
004E30DD    DF69 4E         FILD QWORD PTR DS:[ECX+4E]
004E30E0    58              POP EAX
--------------------------------------------------------------------------------------------------
三、脱壳脚本:

/*
Script written by CCDebuger
Script   : Krypton 0.2 Unpack
版本     : v0.1
日期     : 17-04-2009
调试环境 : OllyDbg 1.1, ODBGScript 1.65, WINXP, WIN2000
调试选项 : 设置 OllyDbg 忽略所有异常选项 
工具 : OllyDbg, ODBGScript 1.65
感谢 : Oleh Yuschuk - author of OllyDbg
       SHaG - author of OllyScript
       hnhuqiong - author of ODbgScript
*/
var temp

cmp $VERSION, "1.65"
jb errorver
bc
bphwcall
dbh
findop eip, #FFE6#
mov temp, $RESULT
bp temp
esto
bc
sto
find eip, #8B95????????8B060BC0#
mov temp, $RESULT
bp temp
esto
bc
find eip, #8B85????????EB#
mov temp, $RESULT
add temp, 6
/*查找以下命令:
004E30D5    8B85 A6714000   MOV EAX,DWORD PTR SS:[EBP+4071A6]        ; 加密输入表的,NOP掉
*/
find temp, #8B85????????EB#
mov temp, $RESULT
mov [temp], #909090909090#
/*查找以下命令:
004E3A5E    FFE2            JMP EDX                                  ; 跳到 OEP
004E3A60    51              PUSH ECX
*/
find temp, #FFE251#
mov temp, $RESULT
bphws temp, "x"
esto
bphwc
sto
cmt eip, "已到 OEP,请用 ImportREC 重建输入表"
ret

errorver:
msg "运行此脚本需要 ODbgScript 1.65 或更高的版本,您的版本过低,请更新 ODbgScript 后再试。"

KRYPTON.rar

77.19 KB, 阅读权限: 10, 下载次数: 8, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表