PctGL SERIES  
http://pctgl.cnblogs.com


 

其实是前一篇那个无崩溃子类代码里面的东西, 因为这次要写的字节码太多了,我又不爱用文本转换的方法

 

于是写了个小函数, 做了一些文本自动编辑,替换工作,实现了一个将机器码自动转换为

 

Long 类型数组, 并提供机器码标志修改的功能.

 

先说使用:

 

   1.  打开 OD ,选中自己想转换为vb代码的函数或代码段,然后点鼠标右键菜单 > 二进制 > 二进制复制

       如图:

                          

  

 

   2.  打开 Opcodes SaveAs VisualBasic 6.0,在灰色的文本框中,粘贴,你就会得到一串 55 8B EC 83 C4 FC B8 D4 13 40 00 8B 文本

       

       如图:

                    

 

 

 

 

   3.  文本本身就是按照空格分开的1组,1组的,不要修改格式, 直接点 GetVisualBasicCode 按钮,就会得到转换后的内容

       

       如图:

                   

 

 

 

 vb代码这样就在绿色文本框中生成了;

 

 数组 LinkProc 4字节 Long 型, 转换程序会自动声明 Dim LinkProc() as long     并且自动计算元素个数;

 

 通常, 这些机器码我们可能会做些修改, 比如把 Mov eax, 12345 的12345 修改成动态数据, 你可以将这个12345,在od中就修改成16进制的 1000(4字节)

 

 程序将自动查找这个 1000 (最大支持16进制的 20000) ,也就是说把 &H1000 这个值做为标记,程序自动查找,并自动计算他的在 LinkProc 数组中的位置

 

然后用 CopyMemory 表示出来,如图上那样  CopyMemory ByVal VarPtr(LinkProc(11)) + 3, &H0100000, 4&   这个&H &H0100000 是要你修改的

 

你可以改成你,需要的数值,  ByVal VarPtr(LinkProc(11)) + 3 表示的就是找到的 &H1000 在数组中的位置,自动算出来的.

 

依次方法, 你可以设置 &H1000 2000 3000 ~ 10000 11000 12000 ~ 20000, 一共20个标记, 这些标记都会被自动找出来,而且表示出来

 

你要做得就是修改copymemory 的第2个参数为你想要的结果, 如果标记位置正好占据了某个元素的位置,就会以   LinkProc(13) = 0200000  的形式表示,同样

 

 自己修改 0200000.

 

 

 

附:实例程序  https://files.cnblogs.com/pctgl/opcodes2vb6.rar

 

posted on 2010-08-11 23:42  PctGL  阅读(1319)  评论(1编辑  收藏  举报