因为相信, 所以看见
答疑,就是在每周四,把问的比较多的,统一回答下。写文章也会比私信回复更详细些。
工具视频的相关文件里,为啥没有 jeb , jadx, GDA这3个工具?
大佬,他们都有官网的。
还有百度云这限速,你不充钱,你能下到明天。
我贴一下地址:
GDA官网:
http://www.gda.wiki:9090/
jadx-gui官网:
https://github.com/skylot/jadx/releases/
jeb吾爱云盘:
https://down.52pojie.cn/Tools/Android_Tools/
讲道理,现在下软件我都去官网,我生怕一些软件站,给我捆绑个木马啥的。
nop这个概念我第一次听到的时候,是在windows时代。
很多年前,我还在混windows的时候。
经常在各种教程,各种视频里,看到各种大佬做这个经典的操作。
那个时候,他们会这么描述,我们nop掉这个关键call, nop掉这个关键跳。
就像下图这样
(我800年没有用od了,为了写文章专门下了一个,真是怀念 )
这里,0x4012A3这里原本是指令是5个字节 E8 A8 FE FF FF。
call 00401150 这行汇编的意思是, 调用 0x00401150 这个地址的函数。
nop填充之后,0x004012A3这里的指令就变成了5个0x90, 也就是5个nop。
nop掉 这句指令 / 这个关键跳 / 这个关键call ,其实就是把这句代码给删了,用相等长度的,无意义的指令去填充。
或者,你可以这么理解,直接用等长的无意义指令(nop),覆盖我们想要删除的任何指令, 这里的指令可以是函数调用,可以是跳转, 也可以是其他任何你看不顺眼的指令.
nop指令原理
nop这个指令,在x86指令集的实际含义是。
xchg eax, eax
这里,我拆解一下
xchg : 交换数据的汇编指令
eax : 一个寄存器
这里寄存器是啥?
寄存器就是cpu里,用来存储数据的,一个速度非常快的存储单元。
实在不懂,理解成一块内存也行,不影响的。
xchg eax, eax 这句指令的意思是,交换两个寄存器 (两块存储区域)的值。
但是,聪明的大佬们一定注意到了,交换的源头和目的地是一样的。
这就好像,老师让你和你自己换座位一样。
这tm换个锤子。
多平台nop指令
x86平台的 nop 指令只有一个字节。0x90
为啥要用x86平台用0x90 作为nop指令填充?
-
因为0x90指令只有一个字节,x86指令不定长,长度可以是奇数,也可以是偶数,为了完美替代任何指令,只能用一个字节的指令去填充。
-
0x90这行指令,执行完之后,不会影响任何寄存器,内存,标志寄存器的值。不会对程序原本流程造成影响。
下面这些指令,在不同平台,起到了和x86平台上0x90一样的效果。
这里做了一个主流平台的nop指令对照表
大佬们凑合看
平台 | arm | Thumb | x86 |
---|---|---|---|
汇编 | mov r0,r0 | mov r8,r8 | xchg eax,eax |
操作码(hex) | 00 00 A0 E1 | C0 46 | 90 |
windows时代,很多大佬,为了防止自己的软件被同行破解。
经常搞一些反调试。
一般会比较文明,触发了就退出程序,也不会干别的了。
另外一些,人狠话不多的小老弟,就开始各种骚操作了,有的触发了就格盘, 有的是弹一个恐怖图片窗口,能吓你个半死那种。
或者弹个文字窗口,经常口吐芬芳,我之前就看到一个弹窗,"你老婆真棒"。
当时我心想,我不仅没老婆,女票都没有,你随便喷。
Android时代,产商的加固或者或各种CTF, 也会有很多反调试。
目的就是让你心态炸裂,让你觉得干逆向还不如去养猪,至少养猪没这么多糟心事。
那么,现在,你又碰到了一个反调试函数。
该咋办?
让他执行吗?
上nop啊。
最后说一句,上nop的时候要注意,有没有上下文引用之类的,有的话记得把这些上下文引用处理好。
0722 王某某于公司办公楼
关于作者:
一个乙方安全公司搬砖的菜鸡,移动安全从业者。最近忙着找女票,忙着在b站当扑街up主。
b站/公众号 : 移动安全王铁头
希望和大佬们一起学习,一起成长
点个
在看
你最好看
本文始发于微信公众号(移动安全王铁头):【周四答疑】很多大佬说的 nop 到底是啥?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论