您的位置:首页 > 其它

171103 逆向-内存与外挂(培训提纲)

2017-11-03 23:49 316 查看
1625-5 王子昂 总结《2017年11月3日》 【连续第399天总结】

A. 协会内存与外挂培训提纲

B.

后天给协会培训,于是先写一下提纲记录一发,顺便自己也复习一下相关的东西

内存和调试器

学习C++的时候老师一定说过,变量都是存储在内存中的

每个变量独占一块空间,在声明的时候系统为其分配

例如int类型的变量独占4字节的空间,char类型的变量独占1字节的空间

前段时间学习编程的时候,经常有同学来问问题,例如我觉得我写的没错为什么结果不对啊?这样运行为什么会报错啊,等等

事实上调试(debug)写好的程序是一项非常重要的技能

除了最简单的在代码中添加log输出(cout就可以)以外,调试器也是很好用的工具:



下断以后可以灵活的跟踪程序运行路径,包括单步运行、跳过函数等等

左下角的监视窗口还可以看到所有变量的值,方便地看出变量的变化是否如期

同时可以自己添加,例如:



还有内存转储窗口,可以直接显示内存



可惜CE的转储窗口只能查看,不能修改

貌似VS的内存窗口是可以直接修改的

CheatEngine

与小时候用过的金山游侠修改器类似,通过值的变化来追踪变量的地址

我们以植物大战僵尸为例,很轻松就能找到变量的地址

手动修改非常简单,但是如果需要更进一步的修改,例如自动变化呢?

就让我们通过程序来解决吧

CE中可以看到地址,那么同理构造一个指针,然后修改其值的方法是不行的

编译器会报错,因为系统决定每个进程只能控制自己的内存,不能随便访问、写入其他进程的内存

因此需要下面介绍的功能

Dll注入

动态链接库(Dll)是Exe的补充组件,与Exe共享内存

它可以被Exe调用,也可以反过来调用Exe

最初目的其实是为了函数的通用

不过由于注入后就具有了该进程内存的权限,因此可以用来制作外挂

我们将之前的程序改为Dll,然后注入(注入可以自己写程序,也可以通过现成的程序)

即可

注意调用的函数需要是导出函数,否则会报错

但是也可以通过DllMain来操作,这个函数与Main类似,当Dll被加载时会自动调用它

注入后即可看到程序的变量产生变化

C. 明日计划

上海大学生网络安全竞赛
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: