安卓逆向lab记录--android studio、smali、apk

step1

task1

添加权限:

没弄清楚到底是哪个,全加进去为快。
在这里插入图片描述

注册广播接收器,收到开机信号启动service:

在这里插入图片描述
在这里插入图片描述

service中周期性获得gps信息并通过toast显示:
这样获得信息:

在这里插入图片描述

这样打印:
在这里插入图片描述

这样周期执行:

在这里插入图片描述

效果:

在这里插入图片描述

task2

在这里插入图片描述

直接这样是不行的,主线程才能更新UI,报错:
在这里插入图片描述

我用这种方法:
在这里插入图片描述

通过handler,传递一个runnable对象,排队请求主线程完成UI更新的操作。貌似读text不需要在主线程,也可以只把更新UI放到队列中等,其它的还在子线程,这样也行:
在这里插入图片描述

运行成功:
在这里插入图片描述

参考这里:https://blog.csdn.net/m0_37705108/article/details/82993433

Step 2

准备

先自己尝试一下smali的代码。通过自己写一段java变成smali的方式。
(1)class->dex

尝试使用dx,dx.bat要稍作修改:
在这里插入图片描述

参考:https://www.jianshu.com/p/77db2ea8098f

(2)class->dex
在这里插入图片描述

解压apk获得了dex文件。

(3)dex->smali
使用jeb:
2.7版本的jeb好像是有点问题,直接重新下载一个3.0的,地址:
https://shareappscrack.com/download-faqs/

还要先修改一下jeb_wincon.bat,确保正确的jdk路径,需要1.8.0u121之前的版本。
在这里插入图片描述

这样就可以用了。
使用方法就是把要逆向为smali的apk拖动到这个bat中。
在这里插入图片描述

然后就得到对应的smali代码。
大致对比看一下自己的demo:
在这里插入图片描述
在这里插入图片描述

task1

但是只看这些就让我用smali写代码还是有点困难,直接用java写一个要求的排序功能的代码,转成smali,然后再试着模仿吧。。

然后按照上面的步骤变成smali,学习一下。
找了一个完整的语法说明文档,链接:
http://www.voidcn.com/article/p-rlagdexr-tu.html
中文版:
https://www.cnblogs.com/liweis/p/4653496.html

这种方式打开的smali不知道该怎么导出对应的smali,先换一种方法试试。
另外一种dex到smali的方法:
java -jar baksmali.jar d -o [输出文件夹] dex文件,先去下载了baksmali,和smali同一个网站就有。
在这里插入图片描述

看到输出的Select.smali

还可以变回dex:
在这里插入图片描述

可以这样直接在安卓虚拟机运行dex:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

目前就先用这个反编译出来的smali,之后再回来模仿保存在:

task2

~暂时先直接反编译回来学习一下。
在这里插入图片描述

STEP3

Task1

按照上面的方法反编译出smali,然后自己尝试将它翻译成java,写在
最后得到一个符合要求的输入串需要满足:
(1)包含且仅包含两个x,放在间距为4的位置
(2)第0个字符是1,第9个字符是9,在第一个x出现之前包含一个子串“key”
(3)第11个之后包含且仅包含一个1
(4)长度在10到16之间(包含两侧)
那么一个答案就是:0keyx000x9100

按照上面的方法在模拟器中运行dex,结果:
在这里插入图片描述

Task 2

首先看他给的dex的执行效果,就是输入学号会获得一个自己的密钥,然后以这个密钥为命令行参数运行,再输入学号,会得到true。还是和task1一样,需要写一个java实现类似的功能~
在这里插入图片描述

STEP4

这个apktool包可以帮助打包apk或者解包。
在这里插入图片描述
在这里插入图片描述

先下载lab.apk,apk在虚拟机的安装方法:
https://www.xuebuyuan.com/3207839.html

运行一下试一试:
在这里插入图片描述

可惜我不知道该输入什么。

task1

为了直到到底密码是什么,我选择前面dex->smali的第一种方式,使用jeb3.0,还是和前面一样,apk拖进去,就看到了反编译的smali代码,好多~
然后右键解析(或者tab)看看jeb帮我们变成的java代码。
在这里插入图片描述

首先在mainactivity里看到这个,这说的就是如果判断不对就把下面那个计数++,对了才能玩游戏。怪不得之前那个?/999999在我按了button之后会变大,(我本来还以为计数到了999999会发生什么呢,这样看起来好像不会有事情发生嘛)

发现这个判断是不可能成功让我们玩游戏的,因为它让两个初始化不同的值进行比较,相等才能玩>-<。
所以说不得不cheat一下了,修改它的初始值!

jeb虽然查看方便,但我还是没有搞清楚它的文件管理是怎么弄的,只能重新解压apk(用apktool,本来图省事直接用7zip解压好像虽然能查看但是压缩回去会出问题)
之后发现竟然里面直接就有smali代码,那就不需要反编译一次了。
在这里插入图片描述

上图是解压再重新压缩,在这之间需要修改那个初始值的地方,找到mainactivity对应的部分,修改之:
在这里插入图片描述

再重打包之后会在dist文件夹下看到生成的apk,在安装之前还需要签名,签名方法就按照学长写的。然后就可以安装并打开模拟器运行了,效果是不管随便输入一个什么,都可以通过task1了:

在这里插入图片描述

task2

这个任务是猜密码,前面说到任务一完成就可以playgame,这次直接看playgame这里,只要能输入正确,他就会告诉我说任务2完成咯。
在这里插入图片描述

这个getflag的两个参数activity里是这样传的:
在这里插入图片描述

ctx是:(。。奥这个没用到,只是必须要传的context)

经过一番字符串的推算,发现答案是lightyellowdress,输入后通过:
在这里插入图片描述

task3

这个任务要想办法找到隐藏的功能。可以看到在PlayGame中有一个native方法(用来使用其他语言的库),具体库的位置可以在lab/lib中看到,尝试调用一下这个方法看看是什么功能,这个就需要修改smali中的PlayGame类:
(之前因为没有修改p0(返回值)导致没效果)

在这里插入图片描述

这样改了一下,然后重新打包,签名,安装:
在这里插入图片描述

然后就可以调用第三方库,效果是输入第二问答案后打印了一个“smaliiscool”。

这样这个lab就做完了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值