-
-
[原创][传奇3G大补帖2.02版 脱壳+破解]
-
发表于:
2006-1-14 00:35
8357
-
【传奇3G大补帖2.02版 脱壳+破解】
【破解作者】 RegKiller
【作者邮箱】 [email]RegKiller2002@yahoo.com.cn[/email]
【作者主页】 无
【使用工具】 OllyDBG 汉化第二版 LordPE Deluxe 增强版 ImportREC v1.6F PEiD v0.94 箫心汉化 UltraEdit-32 v11.20a
【破解平台】 XP SP2
【软件名称】 传奇3G大补帖2.02版
【下载地址】 http://dx.gameswg.net/dbt202.exe
【软件简介】 适用传奇3G 2005版
【软件大小】 636KB
【加壳方式】 Upack 2.x - 3.x Heuristic Mode -> Dwing
【破解声明】 既然作者已经说:考虑到使用辅助程序可能会导致封号,为广大玩家利益考虑,大补帖从即日起暂停更新!
现在把这篇文章献给初学者
--------------------------------------------------------------------------------
【破解内容】下载后用RAR解压得到2个文件。
用PEiD查壳为Upack 2.x - 3.x Heuristic Mode -> Dwing 这壳俺第一次碰到,手脱。
用OD载入Dbt3G.exe
00401030 > $- E9 7DCE0F00
JMP Dbt3G.004FDEB2
; 入口点,F8向下走
00401035 . 42 79 44 77 6>ASCII
"ByDwing@",0
0040103E 00
DB 00
0040103F 00504500
DD Dbt3G.00455000
004FDEB2 BE 88014000
MOV ESI,Dbt3G.00400188
; F8 一直向下走
004FDEB7 AD
LODS DWORD PTR DS:[
ESI]
004FDEB8 8BF8
MOV EDI,
EAX
004FDEF1 B0 01
MOV AL,1
004FDEF3 E3 29
JECXZ SHORT Dbt3G.004FDF1E
; 继续向下走会跳转
004FDEF5 8BD7
MOV EDX,
EDI
004FDEF7 2B55 0C
SUB EDX,
DWORD PTR SS:[
EBP+C]
004FDF1E B5 01
MOV CH,1
; 继续向下走
004FDF20 FF56 08
CALL DWORD PTR DS:[
ESI+8]
004FDF23 33C9
XOR ECX,
ECX
004FDF25 FF66 24
JMP DWORD PTR DS:[
ESI+24]
; 跳
004FE027 AA
STOS BYTE PTR ES:[
EDI]
004FE028 3B7E 2C
CMP EDI,
DWORD PTR DS:[
ESI+2C]
004FE02B 73 03
JNB SHORT Dbt3G.004FE030
004FE02D FF66 28
JMP DWORD PTR DS:[
ESI+28]
004FE030 58
POP EAX ; F4运行到这
004FE031 8B4E 30
MOV ECX,
DWORD PTR DS:[
ESI+30]
004FE034 5F
POP EDI
004FE035 E3 1B
JECXZ SHORT Dbt3G.004FE052
004FE037 8A07
MOV AL,
BYTE PTR DS:[
EDI]
004FE039 47
INC EDI
004FE03A 04 18
ADD AL,18
004FE03C 3C 02
CMP AL,2
004FE03E ^ 73 F7
JNB SHORT Dbt3G.004FE037
004FE040 8B07
MOV EAX,
DWORD PTR DS:[
EDI]
; F4运行到这
004FE042 3C 16
CMP AL,16
004FE044 ^ 75 F1
JNZ SHORT Dbt3G.004FE037
004FE046 B0 00
MOV AL,0
004FE048 0FC8
BSWAP EAX
004FE04A 0346 1C
ADD EAX,
DWORD PTR DS:[
ESI+1C]
004FE04D 2BC7
SUB EAX,
EDI
004FE04F AB
STOS DWORD PTR ES:[
EDI]
004FE050 ^ E2 E5 LOOPD SHORT Dbt3G.004FE037
004FE052 8B5E 34
MOV EBX,
DWORD PTR DS:[
ESI+34]
; F4运行到这
004FE055 8B76 38
MOV ESI,
DWORD PTR DS:[
ESI+38]
004FE058 46
INC ESI
004FE059 AD
LODS DWORD PTR DS:[
ESI]
004FE05A 85C0
TEST EAX,
EAX
004FE05C - 0F84 5EB4F8FF
JE Dbt3G.004894C0
; 此处F2下断,按15次F9后寄存器中EAX值为0同时此处跳转也已实现。跳到光明之处。
004894C0 55
PUSH EBP ; CHAR 'U' 光标停到这。右键->分析->从模块中删除分析,真正代码出现后就可以脱壳了
004894C1 8BEC
MOV EBP,
ESP
004894C3 83C4 F0
ADD ESP,-10
004894C6 B8 28914800
MOV EAX,Dbt3G.00489128
004894CB E8 68D2F7FF
CALL Dbt3G.00406738
004894D0 6A 00
PUSH 0
004894D2 68 3C954800
PUSH Dbt3G.0048953C
; ASCII "Mir3G_Plugin_DBT3G"
004894D7 E8 3CDAF7FF
CALL Dbt3G.00406F18
; JMP 到 USER32.FindWindowA
修复IAT
运行未脱壳的 Dbt3G.exe 然后打开 ImportREC v1.6F 在"附加到一个活动进程"下拉列表框里选择 Dbt3G.exe,然后在下面的"需要的 IAT 信息"中的OEP处把 00001030 修改为 000894C0 然后选择"自动查找 IAT"然后再点"获取输入表",看到上面"找到的输入表函数"列表框里没有无效的函数名就可以转存了。按下面的"修复转存文件"然后选择脱壳后的那个EXE文件修复。修复完后文件夹里多出个_.exe的文件。这个就是修复好的。
用OD从新载入修复IAT后的文件,F9运行程序。然后在程序中选"记次方式",账号和密码随便填.然后登陆,这时程序弹出"输入的大补帖用户名称或密码有误"此时在OD中点右键,超级字串参考+ -> 1 查找 ASCII
超级字串参考+ , 条目 761
地址=00486691
反汇编=MOV EDX,2修复IAT.00486894
文本字串=登录成功!
在表中找到"登录成功"并在上面双击鼠标
0048668E |. 8D45 F4
LEA EAX,
DWORD PTR SS:[
EBP-C]
00486691 |. BA 94684800
MOV EDX,2
修复IAT.00486894 ; 登录成功!
00486696 |. E8 29DFF7FF
CALL 2
修复IAT.004045C4
0048669B |. 8B83 54030000
MOV EAX,
DWORD PTR DS:[
EBX+354]
我们来到 00486691 在这向上找
00486627 |. 33F6
XOR ESI,
ESI
00486629 |> 85F6
TEST ESI,
ESI
0048662B |. /0F8C 64010000
JL 2
修复IAT.00486795 ; 关键跳 在此处下断,从新点登陆
00486631 |. 8B45 FC
MOV EAX,
DWORD PTR SS:[
EBP-4]
程序停在0048662B,把这句NOP掉。F8向下走。一直走到 0048672C 把这句NOP掉
0048672C |. /75 32
JNZ SHORT 2
修复IAT.00486760 ; 把这句NOP掉
0048672E |. |8D45 C4
LEA EAX,
DWORD PTR SS:[
EBP-3C]
00486731 |. |50
PUSH EAX ; /Arg1
00486732 |. |8B45 F4
MOV EAX,
DWORD PTR SS:[
EBP-C]
; |
00486735 |. |8945 CC
MOV DWORD PTR SS:[
EBP-34],
EAX ; |
00486738 |. |C645 D0 0B
MOV BYTE PTR SS:[
EBP-30],0B
; |
0048673C |. |8975 D4
MOV DWORD PTR SS:[
EBP-2C],
ESI ; |
0048673F |. |C645 D8 00
MOV BYTE PTR SS:[
EBP-28],0
; |
00486743 |. |8D55 CC
LEA EDX,
DWORD PTR SS:[
EBP-34]
; |
00486746 |. |B9 01000000
MOV ECX,1
; |
0048674B |. |B8 CC684800
MOV EAX,2
修复IAT.004868CC ; |%s\n\n大补帖帐户还剩 %d 次
00486750 |. |E8 4733F8FF
CALL 2
修复IAT.00409A9C ; \2修复IAT.00409A9C
通过把 0048662B 和 0048672C 改成NOP后程序的包月方式和记次方式都已经破解了。
现在运行程序
包月方式登陆后程序显示为:
登录成功!
大补帖帐户还剩 0 天
记次方式登陆后程序显示为:
登录成功!
大补帖帐户还剩 -11 次
这里的0天和-11次看着不爽,我们继续修改。
用UE查找ASCII字符串
大补帖帐户还剩 %s 天
大补帖帐户还剩 %d 次
改成
大补帖帐户可用无数天
大补帖帐户可用无数次
完成
如果有看不明白的地方可以与我联系
QQ
:14403147
--------------------------------------------------------------------------------
【破解总结】这个壳不难脱,至于为什么我知道应该让程序怎么走原因是我脱壳的时候手动单步跟踪后才明白什么地方应该怎么走的,大家多多练习才行,这个没什么好解释的。
程序中的:大补帖帐户还剩 %s 天 和 大补帖帐户还剩 %d 次 中的%后跟的是变量,这个变量是从网络上读取回来的,我们不是正式用户,所以程序读回来的是错误的数值。
--------------------------------------------------------------------------------
【爆破地址】0048662B
0048672C
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
本代码由xTiNt自动着色
http://kbadboy.yeah.net
[课程]Linux pwn 探索篇!