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 编辑 ] 请问 将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
上面所说的都是个人理解,如果有不对的地方还望包涵。。。 jnz short translat.005543BA 改为jmp translat.0055796E是跳到补丁代码处,这个地址不固定的
0055796E xxxxxxxxx xxxxxx 修改的代码
0055797A(比如是这个地址) jmp 005543BA ////好像这样也可以吧,没必要直接跳到oep
页:
[1]