这次逆向只有向称重机发送商品数据的一部分
相关的工具包在这里:
链接:https://pan.baidu.com/s/1hDNQe7zpG47T2KS0Nqm_Dw
提取码:vr4n
一、使用抓包工具抓取请求的数据
- 在设备上点击数据下载到设备,抓取请求数据
- 点击上传后只有这三条数据出现,分析后发现是通过最后一个请求将数据传输到设备上,并且是采用WebSocket的方式
- 自己编写代码尝试和设备建立通讯,发现可以成功,可是商品数据都是经过处理上传的,所以需要知道它是如何生成的,才能不使用app就可以将数据上传
二、使用AndroidKiller对apk进行反编译
- 将apk拖入到AndroidKiller中,出现反编译成功,等待结束就行
- 在工程搜索中对url中的字符,WebSocket中传输的特殊关键字进行搜索,这里只贴出来了一个
- 发现并没有想要的结果
三、用 jd-gui 打开jar文件
-
由于在AndroidKiller中没有任何发现,避免查找缺失,使用jd-gui再找一遍
-
将smali文件转成jar包
1.先将smali转dex,借助工具smali.jar,在终端下cd到文件所在目录,输入 java -jar smali.jar project/smali/ -o classes.dex 2.然后将dex转换成jar即可,借助工具dex2jar-2.0,输入 d2j-dex2jar classes.dex
-
为了方便我是采用网上提供的一键反编译工具,将apk文件拖到_onekey-decompile-apk.bat上就可以了
-
-
以 getWebSocket 为例,将jar文件拖到jd-gui上方就可以打开文件,并搜索
- 还是没有找到自己想要的结果
感觉到这里好像没办法继续了,尝试以上方法都定位不到想要的数据生成方法,也就没办法使用AndroidStudio进行动态调试了,可是数据已经被抓包工具抓到了,为何反编译后的代码中一个有用的方法都定位不到???
四.分析
- 能抓到请求,数据也肯定是在本地处理后在传输到设备上的,表示所有的方法都在app里面,既然java里面没找到,那就看看js代码里面
有以下发现,这里有发送和接受信息等备注,说明方法很可能就在这个文件里面
- 发现了这个,这下可以明确了数据的上传实在这里进行的,再看看数据是不是也是在这里进行处理的
- 这个地方刚好是抓包中存在的关键字 cmd ,并且通过之前的抓包可以看到数据是多次发送的,在这个地方加上断点,如果点击后能在这里停止,那么数据的处理就在 package 方法里
五.实现
-
adb devices 检查设备是否在线
- 实体机打开开发者模式,启动usb调试功能,连接数据线
- 模拟器直接使用即可
如图则说明能检测到设备,否则尝试断开数据线重连或重启设备
-
在浏览器上访问 edge://inspect/#devices 或者 chrome://inspect/#devices
-
在设备上进入到指定页面,浏览器上就会显示对应的信息
-
点击 inspect,会进入到调式页面,找到之前发现的 dataDistribution.js 文件,找到需要打断点的位置
- 在设备上进行对应操作
发现能够在这里停下来,并且可以查看到原始数据和app上的数据是一一对应的
六、结束
后面只要将对应的js代码拷贝出来调用或者将代码转换成其他语言就可以实现不打开app也可以修改商品信息并发送给称重机了