其实是前一篇那个无崩溃子类代码里面的东西, 因为这次要写的字节码太多了,我又不爱用文本转换的方法
于是写了个小函数, 做了一些文本自动编辑,替换工作,实现了一个将机器码自动转换为
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