|
可以肯定的告诉你,稍微复杂一点的CT脚本想要自动写成易语言基本是不可能的
一般都是把脚本开启后,在内存里看脚本的十六进制字节集,一点点写进去
1.在易语言里使用申请内存命令(也就是CT文件的alloc(newmem,$1000,zdyyq)这一步),我暂且将这个地址称为临时地址
2.比如要修改的地址为6A9EC0,那就将这个地址改为jmp 临时地址(注意,Jmp较为特殊,需要进行处理才能得到真正的字节集,不能直接复制十六进制字节集进行使用)
2.Jmp到临时地址后,在临时地址写CT中的代码,比如movss xmm6,[Top-Kart.dll+600]命令,假设他的十六进制字节集是“11 AA BB CC”,那就直接写内存字节集(PID,临时地址,还原字节集(“11 AA BB CC”))
3.在临时地址写完代码后,结尾再跳转回去,刚才我们将6A9EC0处的命令替换成了跳转,所以这里要跳到6A9EC0下一行的位置以继续执行代码
4.关闭功能时同理,先把6A9EC0原本的代码恢复,再释放掉申请的临时地址即可
时间比较晚了,不然我会写一个更完善的方法作为例子,这里放一段好多年前写的植物大战僵尸汇编功能给你参考
变量名 | 类 型 | 静态 | 数组 | 备 注 | 申请地址 | 整数型 | | | jmp1 | 整数型 | | | jmp2 | 整数型 | | |
如果 (是否开启 ) 申请地址 = 汇编_申请内存 (打开进程 (pid ), 128 )  jmp1 = 申请地址 - 十六进制 (“0046E469”)  jmp2 = 十六进制 (“0046E46A”) - 申请地址 - 368 写内存字节集 (pid, 申请地址, 还原字节集2 (“83 EC 3C C7 46 58 07 00 00 00 8B 15 C0 9E 6A 00 8B 92 20 03 00 00 DB 82 E0 00 00 00 D9 5C 24 18 DB 82 E4 00 00 00 D9 5C 24 1C 83 7E 5C 0B C7 44 24 0C 00 00 48 41 0F 85 2D 00 00 00 D9 44 24 18 C7 44 24 0C 00 00 96 42 D8 64 24 0C D9 5C 24 18 D9 44 24 1C C7 44 24 0C 00 00 0C 42 D8 64 24 0C D9 5C 24 1C E9 18 00 00 00 D9 44 24 18 D8 64 24 0C D9 5C 24 18 D9 44 24 1C D8 64 24 0C D9 5C 24 1C D9 44 24 18 D8 66 30 D9 5C 24 10 D9 44 24 1C D8 66 34 D9 5C 24 14 C7 44 24 08 BA B8 32 3D D9 46 3C D8 C8 D9 46 40 D8 C8 DE C1 D9 FA D9 E4 D9 5C 24 24 DF E0 F6 C4 41 0F 8B 86 00 00 00 D9 44 24 10 D8 C8 D9 44 24 14 D8 C8 DE C1 D9 FA D8 4C 24 24 D9 5C 24 24 D9 46 3C D8 4C 24 10 D9 46 40 D8 4C 24 14 DE C1 D8 74 24 24 D9 54 24 24 D8 C8 D9 E0 D9 E8 DE C1 D9 FA D9 44 24 24 D9 F3 D9 E4 DF E0 F6 C4 05 7A 04 D9 EB DE C1 D9 54 24 24 D8 54 24 08 DF E0 F6 C4 05 7A 04 D9 54 24 08 DD D8 D9 46 3C D8 4C 24 14 D9 44 24 10 D8 4E 40 DE E9 D9 EE DE D9 DF E0 D9 44 24 08 F6 C4 05 7A 02 D9 E0 D9 5E 6C D9 46 68 D9 FF DC 0D A0 96 67 00 D9 5E 3C D9 46 68 D9 FE D9 E0 DC 0D A0 96 67 00 D9 5E 40 83 C4 3C 83 46 60 01 8B 06”) + 还原字节集2 (“E9”) + 到字节集 (jmp2 ), ) 写内存字节集 (pid, 十六进制 (“0046E464”), 还原字节集2 (“E9”) + 到字节集 (jmp1 ) + 还原字节集2 (“90”), )  汇编_释放内存 (pid, 申请地址 ) 写内存字节集 (pid, 十六进制 (“0046E464”), 还原字节集2 (“83 46 60 01 8B 06”), ) |
|