写在开头,引用很喜欢的一句话: 要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学! --致选择
为了回溯编译过程(或对程序进行逆向工程),我们使用各种工具来撤销汇编和编译过程,这些工具就叫反汇编器和反编译器。反汇编器撤销汇编过程,因此我们可以得到汇编语言形式的输出结果。反编译器则以汇编语言甚至是机器语言为输入,其输出结果为高级语言。
数组的表示方式是:在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;对象的表示则以L作为开头,格式是 LpackageName/objectName;
(注意必须有个分号跟在最后),例如String对象在smali中为: Ljava/lang/String; ,其中 java/lang 对应 javalang 包,String就是定义在该包中的一个对象。或许有人问,既然类是用 LpackageName/objectName; 来表示,那类里面的内部类又如何在smali中引用呢?
答案是:在 LpackageName/objectName/subObjectName 的 subObjectName 前加 $ 符号。
方法的定义一般为: Func-Name (Para-Type1Para-Type2Para-Type3)Return-Type
注意参数与参数之间没有任何分隔符,同样举几个例子就容易明白
无序列表的使用,在符号"-"后加空格使用。如下:
> 密码:ftie
Demo
链接: > 密码:u1an
找到so并打开它 因为我的机型是支持arm的所以我这里打开的是armeabi文件夹下的so 如果机型是x86模式的那么这里要打开x86模式下的libJniTestso
编译过程:
按住键盘组合键 shift + f12 打开字符串窗口 这个窗口将会列举出so中所包含的所有字符串 因为上节课我们只编写了一个字符串 所以这里只有一个hello 52pojie! 如果打开的是x86的so这里还会有一些so 但是字符串只有这一个
鼠标点在hello 52pojie!字符串上,打开 Hex dump窗口,修改hello 52pojie!对应内存地址的内容
关于字符对应的16进制可以在百度百科搜索ascii码表 找到字符所对应的16进制
因为我要把hello 52pojie!修改成hello world! 是不是只要找到每个字符所对应的hex修改就好了
这里我看到 hello 52pojie!对应的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii码表上找到world所对应的十六进制是:77 6F 72 6C 64
所以hello world! 对应的十六进制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21
注意编辑的时候光标暂停的位置只有先输入字母才能更改成功,修改好后 右键Apply changes应用
退出后保存
此时已经so修改完毕
大功告成,hello 52pojie! --> hello world!
通过按照伪代码所表达的算法或 *** 作,编好程序,才能运行。IDA Pro全称是交互式反汇编器专业版(Interactive Disassembler Professional),简称IDA,它是一种典型的递归下降反汇编器。IDA并非免费软件,但Hex-Rays公司提供了一个功能有限的免费版本。IDA是Windows,Linux或Mac OS X托管的多处理器反汇编程序 和调试程序,它提供了许多功能,是一款很强大的静态反编译工具。支持很多插件和python,利用一些插件可以提供很多方便的功能大大减少工作量,在CTF中,逆向和pwn都少不了它,更多强大的功能等待童鞋们自己去学习挖掘,三言两语讲不完。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。>欢迎分享,转载请注明来源:内存溢出
评论列表(0条)