学习网站:https://gslab.qq.com
一些tips:
查看游戏进程中的内存信息一般只需要查看/proc/pid/maps就可以了
dnspy修改旅行青蛙里面的一个属性,net程序的反编译神器
apktool反编译,直接修改smali代码,然后同apktool进行打包,签名
IDA一旦选择binary file方式加载文件,则需要用户手动填写要加载的段的地址和相对偏移,用这种方式加载文件时,IDA不会自动分析代码,用户根据自己的需求自行反汇编二进制代码
apk文件采用zip压缩算法,可直接解压
游戏的本地验证逻辑越多,就会越致命
一些基础知识:
硬件断点:硬断点需要硬件寄存器提供支持,断点的数目受Embedded ICE中的Watchpoint数目的限制,但是可以在任何地方设置断点。
软件断点:软件断点通过在运行起来的程序中设置特征值实现,其数目不受限制,但是一般情况下软件断点只能在可写的存储器的地址中设置(比如:RAM),而不能在ROM(比如:Flash)中设置。
因为修改的是程序的代码,所以内存断点很容易被程序自身检测到。而硬件断点则很难被发现。
dll注入:apc注入,hook注入,createremotethread,NtCreateThreadEx(利用内核级的函数)
手拖:esp定律(程序调用必须将esp入栈,函数调用结束要将esp弹栈,将esp压栈的位置下上硬件断点,然后再次返回时就是弹栈的操作,弹栈之后壳的操作就结束了,下面的就是用户代码)
1.单步跟踪法
宗旨:向上的跳转不让实现,向下的跳转实现,当发现大跨度跳转时,即会到OEP
2.ESP定律法
遵循堆栈平衡原理,在壳对程序进行操作加密或者压缩时,会把程序的OEP压入栈中,当壳执行完成后,进行解密或者解压缩,会把真正的OEP从栈中弹出
3.2次内存镜像法
在壳进行解密或解压缩时,最后释放的是资源区段:.rsrc,这个区段被释放完全后,说明整个程序已经被全部解密
操作方法:
载入OllyDbg,ALT+M打开内存窗口,找到第一个资源区段,下断点,Shift+F9或运行,再到内存窗口找到地址为401000的代码区段下断,运行,单步结合单步跟踪法找到OEP
一些基本的概念:
手游包括:代码(逻辑),资源(图片,声音)和数据配置(装备属性,战斗属性,商品属性ÿ