常量记好没有,准备工作还没完呢,找找我们用到的函数的地址,用lordpe就很好,记得选上那个view always firstthunk。其中getdateformat这个函数没有,用lordpe加入也很方便的,在kernel32.dll里面。
getdateformat [54001e]
regcreatekeyex [4dc020]
regsetvalueex [4dc040]
regclosekey [4dc028]
lstrcat [4dc370]
好了,开始写代码了。我们在程序入口点处就强行跳转到后面的大片空白处写我们的代码:
原来的代码:
代码:
//******************** program entry point ******** :0049ddf1 55 push ebp :0049ddf2 8bec mov ebp, esp :0049ddf4 6aff push ffffffff :0049ddf6 68a8aa4e00 push 004eaaa8 :0049ddfb 68dc214a00 push 004a21dc :0049de00 64a100000000 mov eax, dword ptr fs:[00000000] :0049de06 50 push eax :0049de07 64892500000000 mov dword ptr fs:[00000000], esp /////////////////////////////////////////////////////////// :004dbc38 b8c0055000 mov eax, 005005c0 :004dbc3d e999f8fbff jmp 0049b4db :004dbc42 00000000000000000000 byte 10 dup(0) :004dbc4c 00000000000000000000 byte 10 dup(0) :004dbc56 00000000000000000000 byte 10 dup(0) :004dbc60 00000000000000000000 byte 10 dup(0) :004dbc6a 00000000000000000000 byte 10 dup(0) :004dbc74 00000000000000000000 byte 10 dup(0) :004dbc7e 00000000000000000000 byte 10 dup(0) 下面是在hiew里面选edit模式时应输入的形式,要注意的地方一看就明白了,输入完以后按f9 update后会有所变化,这一点请注意。 000dbc42: 6a0a push 00a 000dbc44: 6800be4d00 push 0004dbe00 ;" m?" 000dbc49: 6a00 push 000 000dbc4b: 6a00 push 000 000dbc4d: 6a01 push 001 000dbc4f: 6a00 push 000 000dbc51: ff151e005400 call d,[0054001e] 000dbc57: 680bbe4d00 push 0004dbe0b ;" m?" 000dbc5c: 6810be4d00 push 0004dbe10 ;" m?" 000dbc61: 6a00 push 000 000dbc63: 683f001f00