接下来点击.init.array就足以见到.init,蒸米@Ali聚安全威尼斯人娱乐

小编们清楚so文件在被加载的时候会率先推行.init_array中的函数,然后再施行JNI_OnLoad()函数。JNI_Onload()函数因为有暗号表所以特别轻易找到,不过.init_array里的函数要求团结去找一下。首先展开view
->Open
subviews->Segments。然后点击.init.array就能够看见.init_array中的函数了。

安卓动态调节和测验各种武器之孔雀翎
– Ida Pro

威尼斯人娱乐 1

作者:蒸米@阿里聚安全

威尼斯人娱乐 2

 

威尼斯人娱乐 3

0x00 序

乘机活动安全尤为火,种种调整工具也都不可枚举,但因为条件和急需的不等,并不曾工具是品学兼优的。此外工具是死的,人是活的,若是能搞懂工具的规律再结合上本身的涉世,你也足以成立出归于自身的调节和测量检验火器。因而,小编将会在这里生龙活虎多元小说中享用部分协调平日用或原创的调节和测量试验工具以致花招,希望能对境内移动安全的钻研起到部分助聚剂的遵循。

 

目录如下:

安卓动态调节和测验各样军械之长生剑 –
Smali
Instrumentation

安卓动态调治四种军械之孔雀翎 –
Ida Pro

安卓动态调节和测量检验三种火器之离别钩 –
Hooking

安卓动态调整八种火器之碧玉刀-
Customized DVM

安卓动态调节和测量试验八种军械之多情环-
Customized Kernel

安卓动态调治四种武器之霸王枪 –
Anti Anti-debugging

安卓动态调解种种军火之拳头

  • Tricks & Summary

 

但经常当大家利用ida进行attach的时候,.init_array和JNI_Onload()早就经施行完成了,根本来不急调节和测验。当时大家可以利用jdb这么些工具来化解,那么些工具是设置完jdk以往自带的,能够在jdk的bin目录下找到。在这里处大家选拔Ali活动安全挑战赛2015的第二题作为例子讲明一下怎么调治JNI_OnLoad()。

0x01 孔雀翎

整个世界的暗器共有八百七十余种,但中间最成功、最骇人听新闻说的正是孔雀翎。它利用轻易,却威力无穷。传说,孔雀翎发动之时,暗器四射,犹如孔雀开屏,辉煌灿烂,而就在敌人目眩神迷之际,便已坐卧不安。那军械的叙说与Ida是何等的貌似啊!所以说安卓动态调节和测量检验各个火器中的孔雀翎非Ida莫属。因为Ida太知名了,相应的学科也是整整飞,但广大并非安卓相关的从头到尾的经过,所以小编决定将风度翩翩部分经文的安卓调节和测验技术计算回顾一下。因为篇幅原因,作者并不可能确认保障本文能够覆盖到ida调节和测验的万事,看官如有兴趣能够再持续深远钻研学习。

 

开拓程序后,分界面是这么的:

0x02 还原JNI函数方法名

在android调试中,你会常常看见这连串型的函数:

威尼斯人娱乐 4

 

第一是一个指针加上一个数字,举例v3+676。然后将以此地址作为三个艺术指针进行情势调用,并且第一个参数就是指针本身,举个例子(v3+676)(v3…)。那其实便是我们在JNI里时不经常使用的JNIEnv方法。因为Ida并不会自行的对这几个点子开展甄别,所以当大家对so文件进行调整的时候平常会见到却搞不清楚那一个函数毕竟在干什么,因为那些函数实乃太肤浅了。清除办法特别轻易,只需求对JNIEnv指针做一个类型转变就可以。举例说下面提到v3指针,大家选中后按一下”y”键,然后将项目申明为”JNIEnv*”。

威尼斯人娱乐 5

 

跟着IDA就能够自动寻觅对应的主意并且呈现出来了:

威尼斯人娱乐 6

 

是否须臾间清楚了好些个?其余有人(
貌似是看雪论坛上的卡塔尔国还总计了装有JNIEnv方法对应的数字,地址以致艺术声明:

威尼斯人娱乐 7

有乐趣的同桌能够去笔者的github下载。

 

威尼斯人娱乐 8

0x03 调试.init_array和JNI_OnLoad

咱俩领略so文件在被加载的时候会首西施行.init_array中的函数,然后再履行JNI_OnLoad()函数。JNI_Onload()函数因为有标记表所以特别轻巧找到,可是.init_array里的函数要求和睦去找一下。首先张开view
->Open
subviews->Segments。然后点击.init.array就足以看见.init_array中的函数了。

威尼斯人娱乐 9

威尼斯人娱乐 10

威尼斯人娱乐 11

 

但貌似当大家使用ida实行attach的时候,.init_array和JNI_Onload()早就经实践实现了,根本来不急调试。此时大家得以行使jdb那几个工具来化解,那么些工具是安装完jdk今后自带的,可以在jdk的bin目录下找到。在那大家运用Ali运动安全挑衅赛二〇一四的第二题作为例子批注一下怎么样调度JNI_OnLoad()。

 

开采程序后,界面是这么的:

威尼斯人娱乐 12

 

大家的对象正是得到到密码。使用ida反编写翻译一下so文件会见到我们输入后的密码会和off_628c这些指针指向的字符串进行相比较。

威尼斯人娱乐 13

 

于是大家查阅off_628c这些地点对应的指针,发掘对应的字符串是”wojiushidaan”。

威尼斯人娱乐 14

威尼斯人娱乐 15

 

于是乎大家把那个密码输入一下,开掘密码错误。看样子so文件在加载的时候对密码字符串实行了动态校正。既然动态改善了那大家用ida动态调节和测验一下好了,我们开荒程序,然后再用ida
attach一下,开采前后相继直接闪退了,ida那边也从不其余有用消息。原本那便是自伤程序的情趣啊。既然如此我们动态调治一下JNI_OnLoad()来看一下先后毕竟做了哪些啊。步骤如下:

 

1 ddms

不可否认要张开ddms,否则调试端口是停业的,就不能够在前后相继刚最初的中止了。笔者事先不清楚要张开ddms技巧用jdb,还认为android系统只怕sdk出难点了,重装好两次。汗。

 

2 adb push androidserver
/data/local/tmp/

 

adb shell
su
chmod 777 /data/local/tmp/androidserver
/data/local/tmp/androidserver

此地我们把ida的androidserver
push到手提式无线电电话机上,并以root身份试行。

 

3 adb forward tcp:23946
tcp:23946

将ida的调试端口实行中间转播,那样pc端的ida技能延续手提式无线电话机。

 

4 adb shell am start -D
-n com.yaotong.crackme/.MainActivity

这里大家以debug方式运营程序。程序会师世waiting
for debugger的调试分界面。

威尼斯人娱乐 16

 

5 ida attach target
app

此时大家运转ida并attach那个app的进程。

 

6 suspend on libary
loading

作者们在debugger setup里勾选
suspend on library load。然后点击继续。

威尼斯人娱乐 17

 

7 jdb -connect
com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

用jdb将app复苏推行。

 

8 add breakpoint at
JNI_OnLoad

随之程序会在加载libcrackme.so那些so文件的时候停住。当时ida会师世找不到文件的唤起,不用管他,点收回就可以。随后就会在modules中来看libcrackme.so那几个so文件了,大家点进去,然后在JNI_OnLoad处下个断点,然后点击实践,程序就进去了JNI_OnLoad()那个函数。

PS:有的时候候你分明在三个函数中却力不能支F5,那时候你必要先按一下”p”键,程序会将这段代码作为函数深入分析,然后再按一下”F5”,你就能够以预知到反汇编的函数了。

因为经过有一些麻烦,小编录制了叁个调治JNI_OnLoad()的摄像在自己的github,风乐趣的同校能够去下载观看。因为关乎到任何的技能,我们将会在随之的”ida双开定位”章节中继续上课怎么样调节和测验.init_array中的函数。

 

作者们的对象正是取得到密码。使用ida反编写翻译一下so文件会看出我们输入后的密码会和off_628c那些指针指向的字符串进行相比。

0x04 Ida双开定位

Ida双开定位的情致是先用ida静态剖判so文件,然后再开三个ida动态调节和测验so文件。因为在动态调度中ida并不会对任何动态加载的so文件进行详尽的剖析,所以众多函数并不可能辨认出来。比方静态解析中有过多的sub_XXXX函数:

威尼斯人娱乐 18

 

但动态调节和测量试验中的ida是从未那个音信的。

威尼斯人娱乐 19

 

从而大家要求双开ida,然后通过ida静态深入分析的开始和结果来恒定ida动态调节和测量试验的函数。当然超多时候大家也亟需动态调解的消息来提携明白静态解析的函数。

在上风姿浪漫节中,我们提到.init.array中有个sub_2378(),但当ida动态加载so后我们并不可能在module中找到这么些函数。那该咋办呢?此时大家将在通过静态解析的地点和so文件在内部存款和储蓄器中的基址来恒定目的函数。首先大家来看sub_2378()那一个函数在静态解析中的地址为.text:00002378。而在动态加载中这么些so在内存中的基址为:4004F000。

威尼斯人娱乐 20

 

因此sub_2378()那些函数在内部存款和储蓄器中真的之处应为4004F000

  • 00002378
    =40051378。上面大家在动态调节和测量试验窗口输入”g”,跳转到40051378这些地址。然后开采全都以乱码的韵律:

威尼斯人娱乐 21

 

不用担心,那是因为ida以为这里是数据段。那时候大家倘若按”P”大概选中部分数据按”c”,ida就能把这段数据当成汇编代码实行剖析了:

威尼斯人娱乐 22

 

我们随后还足以按”F5”,将汇编代码反编写翻译为c语言。

威尼斯人娱乐 23

 

是或不是和静态剖判中的sub_2378()长的大半?

威尼斯人娱乐 24

我们随后能够在此个职分参预断点,再结合上焕发青新春提到的调理技能就可以对init.array中的函数进行动态调节和测量检验了。

大家接下去继续分析自残程序那道题,当大家在对init.array和JNI_OnLoad()进行调养的时候,开采前后相继在实施完dowrd_400552B4()后就挂掉了。

威尼斯人娱乐 25

 

于是乎大家在那间按”F7”走入函数看一下:

威尼斯人娱乐 26

 

原来是libc.so的phread_create()函数,猜测是app自身开了三个新的线程实行反调节和测验检查实验了。

风趣的是在静态深入分析中大家并不领会dword_62B4那个函数是做哪些的,因为这些函数的地点在.bss段还还未被开首化:

威尼斯人娱乐 27

威尼斯人娱乐 28

 

唯独当大家动态调整的时候,这一个地方的值已经校订为了phread_create()这些函数的地点了。:

威尼斯人娱乐 29

威尼斯人娱乐 30

 

为此说自作者伤害程序密码这么些app会用pthread_create()开三个新的线程对app举行反调节和测量试验检查测试。线程会运营sub_16Bora()那么些函数。于是大家对这些函数实行剖释,开采里面包车型地铁剧情有恢宏的歪曲,看起来特别困难。这里作者介绍个小trick:平淡无奇的反调节和测量试验方法都会用fopen张开一些文书来检验自个儿的长河是或不是被attach,举个例子说status那个文件中的tracerpid的值是不是为0,即便为0表明没有其余进程在调治那些进度,就算不为0表明有程序在调解。所以大家得以文恬武嬉,在libc.so中的fopen()处下三个断点,然后大家在hex
view窗口中设置数据与Wrangler0的值同步:

威尼斯人娱乐 31

 

那样的话,当函数在fopen处停住的时候我们就能够看到程序张开了怎样文件。果如其言,程序展开了/proc/[pid]/status那一个文件。大家”F8”继续试行fopen函数,看看再次来到后的地址在哪。然后开采大家程序卡在了有个别函数中间,PC上边都以数码,PC下边才是汇编。那该咋做呢?

威尼斯人娱乐 32

 

化解办法依旧ida双开,大家知晓以后PC之处为40050420,libcrackme.so文件的基址为4004F000。因而这段代码在so中的地点应该是:40050420

  • 4004F000 =
    1420。由此大家再次来到ida静态解析分界面,就足以稳固到大家实际是在sub_130C()那么些函数中。于是大家臆度那几个函数正是用来做反调节和测验检查评定的。

威尼斯人娱乐 33

 

为此我们得以通过基址来牢固sub_130C()那些函数在内部存款和储蓄器中的地址:40050420

  • 130C = 4005030C。然后大家在4005030C那一个地址处按”P”,
    ida就足以准确的鉴定识别整个函数了。

威尼斯人娱乐 34

 

为此说动态调治的时候能够帮大家通晓到非常多静态深入分析很难得到到的消息。那也正是ida双开的意思所在:静态扶助动态定位函数地址,动态援救静态获取运维时音信。

 

威尼斯人娱乐 35

0x05 Ida动态改进内存多少和寄放器数值

大家三番伍次剖判自作者侵凌程序密码那个app,大家开采该程序会用fopen
()展开/proc/[pid]/status那几个文件,随后会用fgets()和strstr()来赢得,于是我们在strstr()处下个断点,然后让hex
view的数据与RAV40同步。每趟点击继续,我们都会看出strstr传入的参数。当传入的参数变为TracerPid:XXXX的时候大家停一下。因为在例行状态下,TracerPid的值应该是0。可是当被调护医疗的时候就能够产生调试器的pid。

威尼斯人娱乐 36

威尼斯人娱乐 37

 

为了防范程序意识我们在调度,在这里处大家必要把值改回0。大家在hex
view的2这里点击右键,然后选用edit。随后大家输入30和00,再点击”apply
changes”。就可以把TracerPid改为0了。然后就足以bypass那二遍的反调节和测量检验的检验。

威尼斯人娱乐 38

 

但这些程序检查评定TracerPid的次数极度频仍,大家要不断的改变TracerPid的值才行,这种方式其实有一点治标不治本,所以大家会在下生龙活虎节介绍patch
so文件的法子来化解那些标题。

其它在ida动态调节和测量试验过程中,除了内部存款和储蓄器中的数据足以改过,存放器的数额也是能够动态改进的。比方说程序奉行到CMP
Kuga6,
#0。本来酷威6的值是0,经过相比后,程序会跳转到4082A3FC那么些地方。

威尼斯人娱乐 39

 

而是只要大家在PC实行到4082A1F8那条语句的时候,将奔驰G级6的值动态纠正为0。程序就不会实行跳转了。

威尼斯人娱乐 40

威尼斯人娱乐 41

 

您照旧足以改过PC贮存器的值来支配程序跳转到任何想要跳转到的岗位,简直和ROP的规律同样。但记得要注意栈平衡等难题。

威尼斯人娱乐 42

 

于是乎大家查阅off_628c这些地点对应的指针,发掘对应的字符串是”wojiushidaan”。

0x06 Patch so文件

在上文中,我们经过深入分析牢固到sub_130C()这几个函数有希望是用来做反调节和测量检验检验的,並且小编开了叁个新的线程,而且用了三个while来不断施行sub_130C()那么些函数,所以说笔者们每趟手动的改动TracerPid实乃不现实。

威尼斯人娱乐 43

 

既然如此大家何不把sub_130C()那个函数给nop掉啊?为了避防nop出错,大家先在”F5”分界面选用具有代码,然后用”Copy
to assembly”功效,就能够把c语言代码注释到汇编代码里。

威尼斯人娱乐 44

威尼斯人娱乐 45

 

在那间大家见到就算想要注释掉sub_130C()函数,只供给注释掉000016B8那几个岗位上的代码就可以,就算大家想要注释掉dword_62B0(3)那几个函数,大家则须要注释掉000016BC-000016C4那四个岗位上的代码。接下来大家选中000016B8那风流倜傥行,然后再点击HexView。HexView会帮大家自行定位到000016B8这些岗位。

威尼斯人娱乐 46

 

因为ARM是从未单身的NOP指令的。于是大家使用movs
r0,r0作为NOP。对应的机器码为”00 00 A0 E1”。所以大家把”13 FF FF
EB”这段内容修改为”00 00 A0 E1”。

威尼斯人娱乐 47

 

我们再回”F5”分界面,就能够意识sub_130C()函数已经远非了。

威尼斯人娱乐 48

 

最终我们点击”Edit->Plugins->modifyfile”,然后就足以保留新的so文件了。我们将以此so文件覆盖原apk中的so文件,然后再另行签字。

威尼斯人娱乐 49

 

此番大家先运路程序,再用ida加载,app并不曾闪退,表明大家patch成功了。于是大家先在”Java_com_yaotong_crackme_MainActivity_securityCheck”处下断点。然后在app随意输入一个密码,点击app上的”输入密码”开关。

威尼斯人娱乐 50

 

次第就能停顿在”Java_com_yaotong_crackme_MainActivity_securityCheck”处。大家先按”P”再按”F5”,就能够看出反汇编的c语言了。而那边的unk_4005228C正是保存了密码字符串指针的指针。

威尼斯人娱乐 51

 

因为是指针的指针,所以大家先双击步入这几个地点。

威尼斯人娱乐 52

 

然后在此个地方上按三下”D”,将这里的数码格式从字符转变为指针情势。

威尼斯人娱乐 53

 

然后我们再双击步向那么些地点,就足以见到最终的flag了。答案是”aiyou,bucuoo”。

威尼斯人娱乐 54

 

那道题里我们只是采取了不会细小略的patch
so才能,在实战中大家不仅可以够NOP,大家还足以转移法规决断语句,举个例子将”BNE”变为”
BEQ”。我们竟然能够更正跳转地址,举例直接让程序B到有些地方去执行,那样的话就无需各样的NOP超多语句了。要留意的是,ARM中的跳转指令是基于相对地址总括的,所以您要依赖当前下令地址和指标地址来总括出相对跳转的值。

比如说00001BCC: BEQ
loc_1C28对应的汇编代码为”15 00 00 0A”。

威尼斯人娱乐 55

威尼斯人娱乐 56

 

0x0A代表BEQ,”15 00
00”代表跳转的周旋地址,因为在arm中pc的值是近期命令的下两条(下一条的下一条卡塔 尔(英语:State of Qatar)指令的地点,所以大家必要将0x15再增进2。随后就足以测算出终极跳转到的地点:
(0x15 + 0x2)*4 + 0x1BCC = 0x1C28。Ida反汇编后的结果也表明了结果是BEQ
loc_1C28。

接下去大家想改进汇编代码为00001BCC:
BNE loc_1C2C。只要求将”0A”产生”1A”,将”15”产生”16”就能够。

威尼斯人娱乐 57

威尼斯人娱乐 58

 

0x0A代表BEQ,”15 00
00”代表跳转的相对地址,因为在arm中pc的值是眼下下令的下两条(下一条的下一条卡塔 尔(英语:State of Qatar)指令的地点,所以大家要求将0x15再增长2。随后就能够测算出终极跳转到之处:
(0x15 + 0x2)*4 + 0x1BCC = 0x1C28。Ida反汇编后的结果也证实了结果是BEQ
loc_1C28。

接下去大家想改进汇编代码为00001BCC:
BNE loc_1C2C。只须要将”0A”产生”1A”,将”15”造成”16”就能够。

 

威尼斯人娱乐 59

0x07 Kill调试技术

该技艺是QEver
在《MSC的伪解题报告》中涉嫌的。利用kill大家得以让程序挂起,然后用ida挂载上来,获取有效的音信,然后能够再用kill将次第苏醒运行。大家依然拿自笔者消逝程序密码这么些应用比如,具体实行情势如下:

 

1
首先用ps获取运转的app的pid。

威尼斯人娱乐 60

 

2 然后用kill -19 [pid]
就能够将这几个app挂起了。

威尼斯人娱乐 61

 

3 随后大家用ida
attach上那么些app。因为任何进度都挂起了,所以此番ida挂载后app并不曾闪退。然后就足以在内部存储器中找到答案了。

威尼斯人娱乐 62

 

4
若是想要恢复生机app的运行,供给将ida退出,然后再接纳kill -18
[pid]即可。

威尼斯人娱乐 63

 

威尼斯人娱乐 64

0x08 在内部存款和储蓄器中dump Dex文件

在于今的移位安全遭逢中,程序加壳已经济体制更改为平常便饭了,假设不会脱壳几乎没有办法在破解界混的点子。ZJDroid作为豆蔻年华种万能脱壳器是充足好用的,可是当笔者公开发表那几个类型后就非常受了各样加壳器的针对,比如说抢占ZJDroid的播音接受器让ZJDroid不或许接受命令等。我们也会在”安卓动态调治三种军火之多情环

  • Customized
    DVM”那篇作品中牵线另意气风发种架构的全能脱壳器。但工具便是工具,当大家发表的时候可能也会遇到近乎ZJDroid那样的针对性。所以说手动脱壳那项本事照旧须要学习的。在此生龙活虎节中我们会介绍一下最基本的内部存储器dump流程。在随后的篇章中大家会介绍更加的多的本领。

这里大家拿alictf20第114中学的apk300作为例子来介绍一下ida脱轻便壳的主导流程。
首先咱们用调节和测量试验JNI_OnLoad的本领将前后相继在运作前挂起:

 

adb shell am start -D -n com.ali.tg.testapp/.MainActivity

 

![enter image description
here][59]

下一场在libdvm.so中的dvmDexFileOpenPartial函数上下一个断点:

威尼斯人娱乐 65

 

然后大家点击继续运维,程序就能在dvmDexFileOpenPartial()这几个函数处暂停,传祺0贮存器指向的地点正是dex文件在内部存款和储蓄器中的地址,路虎极光1贮存器就是dex文件的尺寸:

威尼斯人娱乐 66

威尼斯人娱乐 67

 

接下来大家就足以接纳ida的script
command去dump内部存款和储蓄器中的dex文件了。

威尼斯人娱乐 68

威尼斯人娱乐 69

威尼斯人娱乐 70

Dump完dex文件后,大家就能够用baksmali来反编写翻译那么些dex文件了。

威尼斯人娱乐 71

 

因为经过有一点麻烦,我录制了三个dump
dex文件的录像在自己的github,有意思味的同班能够去下载观看。

自然那只是最简便易行脱壳方法,相当多高档壳会动态改善dex的结构体,例如将codeoffset指向内部存款和储蓄器中的任啥地点点,那样的话你dump出来的dex文件其实是不完全的,因为代码段保存在了内部存款和储蓄器中的别样地方。但你绝不操心,大家会在随后的文章中介绍生龙活虎种特轻松的化解方案,敬请期望。

 

于是乎大家把那么些密码输入一下,发掘密码错误。看样子so文件在加载的时候对密码字符串举办了动态改正。既然动态改进了那大家用ida动态调度一下好了,大家开垦程序,然后再用ida
attach一下,开掘先后直接闪退了,ida那边也未尝别的有用新闻。原本那正是自虐程序的乐趣啊。既然如此大家动态调治一下JNI_OnLoad()来看一下程序终究做了何等呢。步骤如下:

0x09 Function Rewrite函数重写

神蹟我们想要将app中的某些函数的逻辑提收取来,用gcc重新编写翻译八个可试行文件,譬如我们想要写一个注册机,就需求把app生成key的逻辑提收取来。可是ida
”F5”过后的c语言直接编写翻译常常会有为数不菲不当,比方未定义的宏,未定义的宣示等。那是因为这个宏都在ida的一个头文件里。里面定义了具备ida自定义的宏和注解,譬喻说平时看看的BYTEn()宏:

威尼斯人娱乐 72

 

加上那一个”defs.h”头文件后就足以寻常的编写翻译ida
”F5”后的c语言了。

其它大家仍然是能够自身成立三个NDK项目,然后本人编辑一个so恐怕elf利用dlopen()和dlsym()调用目的so中的函数。举个例子大家想要调用libdvm.so中的dvmGetCurrentJNIMethod()函数,大家就足以在我们的NDK项目中如此写:

威尼斯人娱乐 73

 

1 ddms

0x10 小结

可能那句话,写了如此多照旧无法确认保证本文能够覆盖到ida调试的全套,因为ida实乃太绵绵不绝了。看官如有兴趣能够世襲深刻商量学习。其它小说中负有关乎的代码和工具都得以在小编的github下载到,地址是:https://github.com/zhengmin1989/TheSevenWeapons

 

自然要张开ddms,不然调节和测量试验端口是关门的,就不可能在前后相继刚伊始的暂停了。小编前边不明了要张开ddms技巧用jdb,还以为android系统恐怕sdk出难点了,重装好五回。汗。

0x11 参照他事他说加以考查小说

  1. MSC解题报告
    http://bbs.pediy.com/showthread.php?t=197235
  2. 伪·MSC解题报告http://bbs.pediy.com/showthread.php?p=1349632

 

小编:蒸米@Ali聚安全,越来越多Android技艺小说,请访谈Ali聚安然博客

2 adb push androidserver /data/local/tmp/

adb shell
su
chmod 777 /data/local/tmp/androidserver
/data/local/tmp/androidserver

这里大家把ida的androidserver push到手提式有线话机上,并以root身份施行。

3 adb forward tcp:23946 tcp:23946

将ida的调节和测验端口举行转向,那样pc端的ida本领三番四遍手机。

4 adb shell am start -D -n com.yaotong.crackme/.MainActivity

此间大家以debug方式运营程序。程序会冒出waiting for debugger的调节和测验界面。

威尼斯人娱乐 74

5 ida attach target app

那个时候我们运维ida并attach那一个app的经过。

6 suspend on libary loading

咱俩在debugger setup里勾选 suspend on library load。然后点击继续。

威尼斯人娱乐 75

7 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

用jdb将app复苏推行。

8 add breakpoint at JNI_OnLoad

随后程序会在加载libcrackme.so这么些so文件的时候停住。那时候ida会冒出找不到文件的唤醒,不用管他,点收回就可以。随后就能够在modules中看出libcrackme.so那些so文件了,我们点步入,然后在JNI_OnLoad处下个断点,然后点击实践,程序就进来了JNI_OnLoad()这一个函数。

PS:临时候你料定在三个函数中却一点办法也未有F5,这个时候你要求先按一下”p”键,程序会将这段代码作为函数解析,然后再按一下”F5”,你就可以知道看见反汇编的函数了。

因为经过有一点麻烦,作者摄像了一个调试JNI_OnLoad()的录制在自身的github,有意思味的校友能够去下载阅览。因为涉及到任何的本领,大家将会在紧接着的”ida双开定位”章节中持续教师如何调节和测试.init_array中的函数。

 

相关文章