网站开发免责声明,网站建设公司为什么没有官网,河北省建设银行网站,贺州网站建代码分析部分
游戏里面还是体验了不少自己CV来的外挂的#xff0c;自己编写的程序还是头一次体验#xff0c;程序源码如下
void startAcctack() {printf(开始攻击\n);// 获取当前系统时间time_t now time(0); // 获取当前时间的时间戳struct tm *local_time …代码分析部分
游戏里面还是体验了不少自己CV来的外挂的自己编写的程序还是头一次体验程序源码如下
void startAcctack() {printf(开始攻击\n);// 获取当前系统时间time_t now time(0); // 获取当前时间的时间戳struct tm *local_time localtime(now); // 转换为本地时间// 使用 printf 输出当前时间printf(Current time: %d-%02d-%02d %02d:%02d:%02d\n,local_time-tm_year 1900, // 年local_time-tm_mon 1, // 月local_time-tm_mday, // 日local_time-tm_hour, // 时local_time-tm_min, // 分local_time-tm_sec); // 秒}int main(int argc, char* argv[]) {while (true) {startAcctack();Sleep(3000); // 每秒输出一次 (3000 毫秒)}return 0; // 这个不会被执行到但可以保留
}运行效果大概就是这样的 接下来编译成exe文件后用debug软件打开接下来就是找函数入口了暂时没有什么经验与是想了一个办法在vc6中进入debug模式鼠标放在函数入口那就可以看到入口地址了。 接着在dtdebug中输入ctrlg跳转到函数处。 这里就就是入口了还贴心的告诉了我们有个sleep 3000准没错了。 然后还有一个办法打开软件后一直后F8最后EIP会停在401b44这里然后去401b44看一眼。 发现是call了401014这个地方再接着去401014看 这里有个JMP指令跳到了401310处这里也就是main的入口了。
那先把代码看明白了
push EBP //将EBP指针存入栈中应该这里会使用ebp进行寻址了所以先push ebp
mov ebp,esp //将esp的值存入到ebp上此时esp和ebp是一样的
sub esp,40 //将esp的值减少40也就是将栈提高40单位应该是字节吧记不清楚了。。。
push ebx
push esi
push edi //这3个应该是为了存储原有的3个寄存器的值方便后面函数使用
lea edi, dword ptr ss:[ebp-40] //lea没学lea 是 Load Effective Address 的缩写。它的作用是将一个有效地址加载到寄存器中而不是加载该地址所指向的内存内容。所以此时edi上存了ebp-40的地址暂时没想明白为什么要把这个值存在edi上这个值不就是刚刚sub esp,40的所在的地址吗
mov ecx,10 //10放入到ecx上
mov aex,cccccccc //ccccccccc存入到eax上
rep stos dword ptr es:[edi] //重复执行16次stosecx是10所以是16次即将edi开始的64个字节大小处全部填满为eax也就是cccccccc
mov eax,1
test eax,eax // test 是一种按位与AND操作但其结果不存储。它只会影响标志寄存器Flags Register用于后续的条件跳转。test eax, eax 实际上检查 eax 的值是否为零。如果 eax 中的值为零结果为零零标志位ZF会被设置为 1。如果 eax 中的值非零结果为非零零标志位ZF会被设置为 0。这里面eax不为0所以ZF位为0
JE short test.0040134c //je 指令是 Jump if Equal 的缩写只有在零标志位ZF为 1 时才会跳转。所以此时不会跳转接着往下看
CALL test1.00401005 //继续跟跟到这个401250里面以后就调用了很多系统相关的汇编了看不太懂了不过不重要了因为这里就是我们要找到的攻击函数所在的地址了。 好回来再接着看
mov esi,esp //将esp的值存到esi上。
push 0bb8 //这里push的就是3000
call near dowrd ptr ds:[43d17c] 这里追进去就看到了就调用了sleepex函数了 按-号回到之前的call near dowrd ptr ds:[43d17c] 这里面来 再接着看
cmp esi,esp //cmp 是比较指令compare用于比较两个操作数。它会计算两个操作数的差值但不会改变它们的值。这里面的话esi之前存一次esp的值了由于Push了一个0bb8所以此时esp应该会小一些。
call test1.00401490 //又call了继续看,其余的都不继续写了里面太多了直接回来
JMP SHORT test1.00401328 //直接又回到了401328处看来这里就是写的死循环了自己写的代码到这里面就分析的差不多了第一次这么分析自己写的代码感觉还挺不一样虽然有点慢但是感觉收获还是有不少的。自己又动态跟了一遍太麻烦了就不写了
攻击实施
此时已经找到了攻击的call了我们想要改变攻击的频率只要把sleep 3000的这个值给修改掉就好了。
方法一、CE直接改内存 这个地方要填401339而不是之前3000所对应位置的401338因为前面还有一个68多占了一个字节 接着双击改成1000 攻击此时就变成一秒一次了
方法二、代码注入器直接调用call
这种方法想攻击多快就攻击多快自定义攻击
方法三、当然是写代码啦
不过这种还是等到以后再说吧虽然已经会写了但是还是一知半解的以后再说先体验一把快乐快乐再说
相关附件下载