新版本用DrawTextA还是可以,不过有更方便的方法 (1千字)
反汇编picobj41.dll,看到下面几个含义明显的输出函数。这几个都是C++的类成员函数,函数名均为AddDemoLabel( ),前两个是CImageInterface类的重载函数,后两个是CImageProcessor类的重载函数):Addr:10003AA0 Ord: 42 (002Ah) Name: ?AddDemoLabel@CImageInterface@@QAEHH@Z
Addr:10003AC0 Ord: 43 (002Bh) Name: ?AddDemoLabel@CImageInterface@@SAHPAUHDC__@@H@Z
Addr:10006D20 Ord: 44 (002Ch) Name: ?AddDemoLabel@CImageProcessor@@SAHPAPAXH@Z
Addr:100068E0 Ord: 45 (002Dh) Name: ?AddDemoLabel@CImageProcessor@@SAHPAUHDC__@@HJJ@Z
再反汇编AutoGraphicsHTML.exe,看它在哪里引用了这些函数,结果在import table里没找到上述函数,说明该exe不是直接调用这些函数的。
在该dll中查找文本串“AddDemoLabel”,发现只有一处是在上述几个函数的函数体之外调用它们的(在CImageSaver类的BeforeSave( )函数中):
Exported fn(): ?BeforeSave@CImageSaver@@QAEHPAPAXHHHHHHHMJUtagRECT@@H@Z - Ord:0030h
:10007B69 8B442410 mov eax, dword ptr [esp+10]
:10007B6D 85C0 test eax, eax
:10007B6F 740B je 10007B7C
:10007B71 6A01 push 00000001
:10007B73 56 push esi
* Reference To: PicObj41.?AddDemoLabel@CImageProcessor@@SAHPAPAXH@Z
|
:10007B74 E8A7F1FFFF call 10006D20
:10007B79 83C408 add esp, 00000008
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10007B6F(C)
|
:10007B7C 8B442444 mov eax, dword ptr [esp+44]
显然只要把CS:10007B6F处的je改为jmp即可(74改为EB)。
总结:不要使用含义明显的串;程序的保护部分越符合结构化的特点越容易被破掉。
