逆向学习(三)逆向实战
APP逆向实战
常规hook是被动,hook的函数/⽅法要被动等待触发,不能主动调⽤要hook的代码。⽽rpc可以主动调⽤要hook的代码。
rpc:
# rpc
var sig = "";
get_hello: function(str){
Java.perform(
function(){
var some = Java.use('XXXX');
sig = _sig()
}
)
}
}
# 可以使⽤python主动调⽤。
get_hello(str)
# 常规写法
Java.perform(
function(){
var some = Java.use('XXXX');
<_sig.implemtation = function(){
// do something
}
}js代码加密软件
)
抓取分析思路:
先分析⽬标产品形态有⼏种(PC,H5,⼩程序,APP);对⽬标产品形态和各功能/界⾯使⽤和了解;确定抓取哪种产品状态。
常规抓取分析:
先抓包,到要抓的⽬标URL(通常是列表URL和详情URL)。通过抓包要弄清楚:请求参数的差异和特点、搞清楚哪些参数是固定值,哪些是变化值,哪些可有可⽆、哪些参数是主要控制返回内容的、如何翻页等。
写简单程序模拟⽬标URL的请求(从抓包⼯具中复制信息和URL到程序中)。模拟请求分三种:
1、复制抓包header信息,模拟请求能成功。此时需要确定该header信息有⽆时效性,能否⼀直使⽤,时效性是多久。尝试五分钟/⼀⼩时/⼀天的时间间隔,使⽤header信息,再次模拟,检查是否请求成功。如果有时效性,可以结合抓包⼯具,使⽤定时更新header的⽅式进⾏抓取;如果没有时效性,⼀⽀可以⽤,则直接使⽤抓包的参数⼀直抓取。
2、模拟请求不成功。需要逆向分析APP
3、难度是在太⼤,分析APP其他版本的抓取难度(⼤型APP会分版本,lite版,国际版,⼤型节⽇特殊版,⽼版)有的⽼版本还需要指定版本的android系统。
复杂抓包:
即配置代理后抓不到包的⼏种情况:
1、APP不⾛设置的代理:
表现为:打开抓包软件,抓不到包,但APP能正常访问;关闭抓包软件后APP仍能正常访问。
解决:ProxyDroid APP 全局代理,强制把IP转发到代理端⼝。
2、APP做ssl证书验证:
表现为:打开抓包软件后APP不能正常访问
解决:justtrustme等Hook 校验代码,让APP信任代理证书或不做证书验证。
3、APP做双向证书验证:
表现为:打开抓包软件后,APP不能访问,但抓包软件上会有服务端返回的错误。
解决:抠出APP的SSL证书,导⼊抓包软件
4、APP的⽹络请求库代码有混淆(okhttp HttpURLConnection等):
表现为:打开抓包软件后APP不能访问
解决:⽅法⼀:使⽤升级版JustMePlus姿势配Hook混淆后的⽹络请求库代码(⾃适配okhttp);⽅法⼆:使⽤sll_logger Hook系统ssl_read ssl_write函数,在⼿机上抓包,⽆需配置代理和安装证书。
5、APP不是发的应⽤层http协议,使⽤socket⾛的是⽹络层tcp协议
表现为:打开抓包软件,抓不到饱,但APP正常反问,关闭抓包软件后也能正常访问。
解决:tcpdump或wireshark抓tcp包,线索hook app代码,抓到发包和解包的代码出。发送的数据通常是私有协议,需要逆向解密。
6、能抓包,但返回数据加过密,看不懂。
解决:线索HookAPP到加解密代码。
各种APP
⽹络请求库由第三⽅提供,HTTP/HTTPS/WebSocket协议、JustTrustMeHook没混淆的⽹络库、JustMePlusHook混淆后的⽹络库(⾮100%)
ssl(系统提供,ssl_logger,抓到的包输出为.pcap⽂件,需要⽤专门软件打开。使⽤⽅式:python ssl_logger.py -pcap xin.pcap -uchtv(可以换成进程id))
socket(系统提供,Tcp链接)
AndroidIOS
如何确定APP没⾛HTTP⽽是⾛TCP:
1、配置好代理抓包,打开抓包软件,APP能正常访问;
2、使⽤抓包软件抓不到想要的请求;
3、关闭抓包软件(配置不取消),APP也能正常访问。
该现象和APP不⾛代理的现象相似。
在⼿机装httpcany APP(可以抓http/https tcp udp),对指定APP进⾏抓包,观察有⽆数据包⽐较⼤的tcp包(10K以上),如果有可以确定APP⾛的TCP连接。
wireshark/tcpdump抓⽹卡的tcp/udp包的缺点:数据包太多,不能指定对象抓包,过滤⿇烦。
Java.choose的使⽤
原型:Java.choose(className, callbacks)
作⽤:在内存中扫描Java的堆(heap)到指定类(className)的实例化对象
例⼦:Java.choose('com.Tester.Mtop.a', {"onMatch":functnion(instance){}, "onComplete":function(){}})
数据--->protobuf数据
protobuf协议由:protobuf编译⼯具编译.proto语法⽂件,同时⽣成protobuf处理程序,⽤处理程序来解析/反解析protobuf数据。
编写.proto语法⽂件--->.proto⽂件编译成代码--->利⽤编译后的代码对传输数据开始加密。
将.proto⽂件编译成python代码:protoc --python_out=.test.proto

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。