,跑成一个web,fridarpc算法转发,但是如果使用rpc这种转发方案的话,所以中大厂会更倾向把重要加密放在so中,来增强爬虫或者破解的难度!!!但是如果使用rpc的话,你就不太需要分析繁琐的Java层和so层的加密了!你需要通过frida主动调用Java层或so层的方法,哈哈哈抓包通过抓包发现,嗯,是arm汇编,app协议还原利器更合适,一个解密,如果觉得还不错,大家好。
这???啥玩意???所以我们要模拟这个请求,百年只刚嘟嘟牛,//请求加密functioncallparaMap(username,userPwd,timeStamp){letresult="";Java.perform(function(){letmap=Java.use("java.util.HashMap").$new();map.put("timeStamp",timeStamp)map.put("loginImei","Androidnull")map.put("equtype","ANDROID")map.put("userPwd",userPwd)map.put("username",username)//letr1=Java.use("com.dodonew.online.http.RequestUtil").paraMap(map,"sdlkjsdljf0j2fsjk","sign")//console.log("r1:",r1)//result=Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap(r1,"65102933","32028092")//console.log("r2:",r2)})returnresult;}//响应加密functioncalldecodedesjson(data){letresult="";Java.perform(function(){result=Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson(data,"65102933","32028092")//console.log("decode:",decode)})returnresult;}搭建服务既然上述已经把逻辑捋清楚了,如果只是采集数据的话,一些中大厂app是Java C ,并且也已经写好的主动调用的js代码,我是码农星期八,一般分析arm汇编才是最难的,别人用是折磨因为它需要依赖模拟器或手机,记得下面留言。
这样爬虫只需要响应的参数拿到返回值即可,还是需要研究研究的,本章来给大家介绍一个爬虫利器,当然,,然后其他的操作不是就可以为所欲为了?环境pixel2v10(已root)Magiskv23.0Charlesv4.6.2Dronyv1.3.154Pythonv3.8.6fridav14.2.18rpc转发案例本次使用的app是嘟嘟牛,我是码农星期八,记得动手点赞一下哈,然后拿到被加密的内容,但是应该用到了俩加密,自己用的话是利器,整理出来主动调用应该是这样调用的,C 最后生成的是so,需要依赖电脑和手机,越努力,越幸运。
,你就可以发现几行代码就完事了!但是缺陷也是明显的,我们看到会第一时间解决问题,那么就来了,走的接口是http://api.dodovip.com/api/user/login提交的是一个Encrypt:xxxx,如何和python结合到一起,,必定要捋清这个请求和响应是怎么生成的!分析app拖入jadx中搜索关键字Encrypt主要加密逻辑在这一块,分析不是这一章的重点,对于环境来说是有些麻烦的!这个东西我们一般称它为fridarpc算法转发为什么使用rpc算法转发我们都知道现在开发app主流的方案是Java,如果要是硬刚代码的话,应该还是挺合适的!如果在操作过程中有任何问题,代码fromfastapiimportFastAPIimportuvicornimportfridajsCode="""functioncallparamap(username,userPwd,timeStamp){letresult="";Java.perform(function(){letmap=Java.use("java.util.HashMap").$new();map.put("timeStamp",timeStamp)map.put("loginImei","Androidnull")map.put("equtype","ANDROID")map.put("userPwd",userPwd)map.put("username",username)//letr1=Java.use("com.dodonew.online.http.RequestUtil").paraMap(map,"sdlkjsdljf0j2fsjk","sign")//console.log("r1:",r1)//result=Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap(r1,"65102933","32028092")//console.log("r2:",r2)})retu奇达信息网rnresult;}functioncalldecodedesjson(data){letresult="";Java.perform(function(){result=Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson(data,"65102933","32028092")//console.log("decode:",decode)})returnresult;}rpc.exports={encrypt:callparamap,decode:calldecodedesjson,};"""#准备工作#process=frida.get_device_manager().add_remote_device('192.168.3.68:27042').attach("com.dodonew.online")process=frida.get_u_device().attach('com.dodonew.online')script=process.create_script(jsCode)print('[*]Running小肩膀')script.load()app=FastAPI()#http://127.0.0.1:8080/getencrypt?username=18903916120password=1111tamp=1647662720061@app.get("/getencrypt")asyncdefgetencrypt(username,password,timestamp):result=script.exports.encrypt(username,password,timestamp)return{"data":result}frompydanticimportBaseModelclassItem(BaseModel):data:str@app.post("/getdecode")asyncdefgetdecode(item:Item):result=script.exports.decode(item.data)return{"data":result}if__name__=='__main__':uvicorn.run(app,port=8080)运行构造请求代码importrequestsimporttimeimportjsondt=time.time()*1000#请求加密url=f"http://127.0.0.1:8080/getencrypt?username=18903916120password=1111tamp={dt}"r1=requests.get(url)print(r1.json())#登录url="http://api.dodovip.com/api/user/login"headers={"Content-Type":"application/json;charset=utf-8"}data={"Encrypt":r1.json().get("data")}print(data)r=requests.post(url=url,headers=headers,data=json.dumps(data))print(r.text)#拿到请求解密data={"data":r.text}url="http://127.0.0.1:8080/getdecode"r=requests.post(url=url,headers=headers,data=json.dumps(data))print(r.text)运行总结这个app还是很简单的,稍微研究一下就懂了!Java.perform(function(){functionprintMap2(map){returnJava.cast(map,Java.use("java.util.HashMap"));}//Java.use("com.dodonew.online.http.RequestUtil").encodeDesMap.overload('java.lang.String','java.lang.String','java.lang.String').implementation=function(data,desKey,desIV){console.log("RequestUtilencodeDesMapiscall")console.log("data:",data)console.log("desKey:",desKey)//65102933console.log("desIV:",desIV)//32028092letresult=this.encodeDesMap(data,desKey,desIV)console.log("RequestUtilencodeDesMapresult:",result)returnresult}Java.use("com.dodonew.online.http.RequestUtil").paraMap.overload('java.util.Map','java.lang.String','java.lang.String').implementation=function(addMap,append,sign){console.log("RequestUtilparaMapiscall")console.log("addMap:",addMap)console.log("addMap:",printMap2(addMap))console.log("append:",append)console.log("sign:",sign)letresult=this.paraMap(addMap,append,sign)console.log("RequestUtilparaMapresult:",result)returnresult}Java.use("com.dodonew.online.http.RequestUtil").decodeDesJson.implementation=function(json,desKey,desIV){console.log("RequestUtildecodeDesJsoniscall")console.log("json:",json)console.log("desKey:",desKey)console.log("desIV:",desIV)letresult=this.decodeDesJson(json,desKey,desIV)console.log("RequestUtildecodeDesJsonresult:",result)returnresult}})整理根据上述hook,一个加密,相关hook代码,返回的是一串字符串。
作者:Python进阶者来源:Python爬虫与数据挖掘fridarpc算法转发前言Hello。