研究Xenocode

暑假没事写的,当时一直没发布……


  最近弄下来Xenocode Postbuild 2007的破解版,加密.Net程序集挺好,而且它能把程序编译成x86的,选Suppress ILDASM and other external reflection tools或者Compile managed application to native x86 executable image就行,后者可以让程序脱离.Net Framework。只是,自己程序一旦转为本机代码下的,它运行前就会弹出个消息框说:“This application was created using an evalution version of Xenocode products.” 用其他的功能比如扰乱就没这个问题,但还是觉的编译成x86更安全些。可是这个消息框太讨厌……


  用IDA pro打开postbuild的主程序会发现他的程序里有一个段无法反汇编,我估计这个段是加密了的代码。我估计这些加密的代码就是自己写的程序集的代码。用Postbuild处理自己的.net程序也会产生这样一个段,结构和postbuild的主程序相似。

在这个段后面有另一个段,不管是自己的exe还是postbuild的主程序IDA都能反汇编出一部分代码,而且它们基本相同。这些代码我估计是在加载exe时执行的,它用来解密并启动加密了的原始.Net程序。
所以我想Postbuild应该原先也是.Net的,然后Xenocode Postbuild发布时,自己将自己处理了一遍,就成了现在这个样子。

弹出消息框很可能会直接调用MessageBox这个API函数 ,可以在最后找到:

然后那个消息框的调用就非常好找:

我本以为,这些代码会被复制到postbuild处理出的每一个编译成x86的程序中,所以,我就用UE把这几条指令对应的字节全改成0x90,即nop,
结果不起作用。。。
显然,这就证明了刚才:
 这些代码是postbuild将自己编译成x86而产生的,postbuild自己将自己处理过
 “这些代码我估计是在加载exe时执行的,它用来解密并启动加密了的原始.Net程序。”
所以postbuild处理程序时,以上这些代码是由那个被加密了的段中的程序产生的,这就不好说了。。。。

  不过,用postbuild处理过的程序,倒是可以用这种方法除去那个消息框。
修改有两种方法,要么都换成nop指令,要么把调用堆栈里的hWnd参数换成任意值,只要不是0,也不和别的程序的窗体的Handle相同即可(后者不是很好,但通常不会碰巧对应上一的窗体的Handle,一般Handle的值都较大,设成1应该差不多,这个只需改一个字节,实在不行把那条消息内容改了)

 

 

 

注:

寻找类似于6A 40 68 E0 CF F0 30 68 18 22 F1 30 6A 00 FF 15 F8 31 F2 30

文件中的地址不定。好久没用过了,曾经的小工具也找不见了,可以手动替换这些。

posted @ 2007-11-16 13:19  Yuri  阅读(1268)  评论(1编辑  收藏  举报