杨家将 发表于 2008-6-9 05:10:48

SMC补丁制作问题

在运用smc进行,带壳破解时,要写入smc代码,如:
第一处:(跳到SMC补丁数据地址)

                              
005543B0    75 08                  jnz short translat.005543BA               ; ★补丁地址★
005543B2    B8 01000000            mov eax,1
005543B7    C2 0C00                  retn 0C
005543BA    68 00000000            push 0                                    ; 返回程序OEP值
005543BF    C3                     retn                                    ; 飞向光明之颠 ~_~

修改为:

005543B0   /E9 B9350000            jmp translat.0055796E                     ; 强制跳到补丁数据0055796E处
005543B5   |90                     nop
005543B6   |90                     nop
005543B7   |C2 0C00                  retn 0C
005543BA   |68 50254F00            push translat.004F2550
005543BF   |C3                     retn
请问 将jnz short translat.005543BA 改为jmp translat.0055796E,
005543BA    68 00000000push 0改为005543BA   |68 50254F00    push translat.004F2550
的理由是什么?jmp translat.0055796E和push translat.004F2550这个代码从哪里得出来的?

[ 本帖最后由 杨家将 于 2008-6-9 05:13 编辑 ]

hflywolf 发表于 2008-6-9 17:21:55

请问 将jnz short translat.005543BA 改为jmp translat.0055796E,
005543BA    68 00000000push 0改为005543BA   |68 50254F00    push translat.004F2550
的理由是什么?jmp translat.0055796E和push translat.004F2550这个代码从哪里得出来的?


jnz short translat.005543BA 改为jmp translat.0055796E

是利用壳自身解压原理,填充补丁数据
简单来说就是在壳解压完毕后准备返回程序OEP的那一瞬间将补丁数据写入.

那补丁数据从哪写入?写入指令在哪呢。

那就要在加壳程序中找块空地加入将补丁数据写入的指令。

所以上面那个jmp translat.0055796E就是跳向写入补丁数据的地方。
(0055796E就是空地的地址,地址是任意的)

push translat.004F2550

而这代码从何而来,4F255O就是OEP地址咯。你拿着程序手脱一下就知道了。

/:013 /:013 /:013
上面所说的都是个人理解,如果有不对的地方还望包涵。。。

破解爱好者 发表于 2008-6-13 10:29:29

jnz short translat.005543BA 改为jmp translat.0055796E是跳到补丁代码处,这个地址不固定的
0055796E xxxxxxxxx   xxxxxx   修改的代码
0055797A(比如是这个地址) jmp 005543BA    ////好像这样也可以吧,没必要直接跳到oep
页: [1]
查看完整版本: SMC补丁制作问题