一.前言
上三次我们把unidbg的基础到进阶都讲完了,现在我们来讲unidbg的大打包,打包分为两种打包,一种是传参一种是不传参,我根据往期案例挑几个和大家讲
二.不传递参数
这个我们拿车智赢举例子
2.1 配置和编译
点击这里
再点击这几个选项
点击应用,这样就是配置好了
再这么选择点击
点击
然后生成了一个out文件夹,其中圈出来的这个就是主要运行的jar包,然后我们把apk导入
这样我们就能够调用了,我们把他放入pycham,然后就可以使用终端调用和python代码调用了,这里我都教给大家
2.2 终端调用
我们进入到这个路径的根路径,执行
java -jar unidbg-0.9.7.jar
这样就能出值了
2.3 python调用
这里给出代码
import subprocess
cmd = f"java -jar unidbg-0.9.7.jar"
signature = subprocess.check_output(cmd, shell=True, cwd="unidbg_0_9_7_jar")
data_string = signature.strip().decode('utf-8')
print(data_string)
三.传递正常参数
tips:以后再打包别的 需要删除编译后的jar和配置文件
3.1 传参的注意事项
1 因为使用python调用jar,需要动态传入参数给jar
2 借助于 java的main函数String[] args,把参数传入
java -jar xx.jar a=10
public static void main(String[] args) {
String a=args[0]
BiliBili bili=new BiliBili();
bili.sign();
}3 注意事项
3.1 参数中,如果包含 & 或者 空格,都会有问题
java -jar unidbg.jar name=justin&age=19 # 会把& ,解析成空格--》
String name=args[0]
String age=args[1]
java -jar unidbg.jar name=justin age=19
String name=args[0]
String age=args[1]
3.2 我们的目标是,直接给它一个字符串 'name=justin&age=19&hobby=篮球'-->java拿到第0个位置字符串,自己通过 & 和 = 分割,放到 map中3.3 要完成上述目标,传的时候,需要使用 "name=justin&age=19&hobby=篮球" 传入
String str=args[0] # name=justin&age=19&hobby=篮球
3.4 如果字符串特别长,终端也不支持
-传一个文件名,把字符串放到文件中--》在java中打开文件读出来用
4 python调用java,只支持传字符串形式
3.2 编译和配置
我们先把这个配置的文件夹删掉,我们当时选的是在这个目录,直接删掉就好了,再把那个out的输出文件删除,我这里已经删除了
这样就配置好了,这次改了位置,方便好找,就在主文件夹下生成了个META文件夹,然后我们再来改代码
我们当时这么写的,现在不能写死,根据前面的介绍肯定知道,我们得把传入的字符串改成字典
先把main里面写上传递参数
再定义这么一个静态变量,将传入的字符串转换成字典
这里改成这样就好了
3.3 终端调用
然后,我们把apk复制进去,然后复制到pycham里面,然后终端调用,执行命令
java -jar unidbg-0.9.7.jar "actual_played_time=0&aid=466565149&appkey=1d8b6e7d45233436&auto_play=0&ts=1647952932"
3.4 python调用
这里给出python调用的方法
import subprocess
body = "actual_played_time=0&aid=466565149&appkey=1d8b6e7d45233436&auto_play=0&ts=1647952932"
cmd = f'java -jar unidbg-0.9.7.jar "{body}"'
signature = subprocess.check_output(cmd, shell=True, cwd="unidbg_0_9_7_jar")
data_string = signature.strip().decode('utf-8').split("\n")[-1]
print(data_string)
四.传递长字符串参数
这个我拿识货给大家举例子
大家记不记得这里,我们传递了很长的字符串,但是终端不支持长字符串,上面我们说了,可以放入文件读取
4.1 修改代码
main里这么修改
sign这么修改
这样我们传入一个txt文档,把参数都放进去就好了
最后构建出来是这样的,把他放到python的文件夹里面
4.2 终端调用
执行java -jar unidbg-0.9.7.jar data.txt
数据是出来了,但是发现乱码,这是window终端,中文都会显示乱码,这是因为编码形式不同导致的,那我们用python调用就能解决这个问题
4.3 python调用
import subprocess
import locale
body = "data.txt"
cmd = f'java -jar unidbg-0.9.7.jar "{body}"'
subprocess.run(cmd, shell=True, cwd="unidbg_0_9_7_jar",encoding=locale.getdefaultlocale()[1])
这样就ok了
五.总结
今天说的很简单,就是打包,相信大家看一下就会了,怎么说呢,本来打算今天结束app逆向基础的,但是我后面会给大家讲一个完整的比较难的,那就是XHS,让我们拭目以待把
六.补充
有什么问题私我,记得点赞关注加收藏哦,有求必应
标签:逆向,调用,java,python,APP,args,jar,unidbg,day27unidbg From: https://blog.csdn.net/weixin_74178589/article/details/140909489