安卓逆向能做什么,安卓应用逆向工具
安卓脱壳实操应用
抓住包就如图所示
基本解码
经过定位确定在这里
日本航空
艾达山有直接导出函数
JT ring _ fast调用Java _ com _ gold ze _ mvvmhabit _ utils _ native utils _ encrypt(JNI env * a1,int a2,int a3)))//r0 const char * V6;//R1 jstring V7;//R4 char v 9[12];//[sp4h][BP-74h]ByRef unsigned _ int8v 10;//[sp10h][BP-68h]ByRef _ byte v11[11];//[sp11h][BP-67h]byrefcharv 12[12];//[sp1ch][BP-5ch]ByRef _ dwordv 13[3];//[sp28h][BP-50h]byrefcharv 14[12];//[sp34h][BP-44h]byrefcharv 15[12];//[sp40h][BP-38h]byrefcharv 16[12];//[sp4ch][BP-2ch]ByRef _ dwordv 17[3];//[sp 58h][BP-20h]BYREF v 17[2]=0;v17[0]=0;v17[1]=0;V4=(A1 )-getstringutfchars (a1,a3,0);STD:string:3360 basic _ string decl type(nullptr))v 16、v4;sub _ e490(v17;标准:字符串:3360至字符串(16节;v5=时间(0;//时间戳STD:3360to_string(v16,V5);sub _ e4a 0(第17节;加入(v14、v17、44;sha1 ) v15、v14//初步查看sha1加密STD:3360 string:3360 ~ string(v 14);V13[2]=0;V13[0]=0;V13[1]=0;sub _ e4a 0(第13节;sub _ e4a 0(第13节;加入(v12、v13、44;STD : string :3360 basic _ string (v 9,v 12);b 64编码(v10,v 9);//重点特征STD:3360 string:3360 ~ string(V 9;V6=* v11[7];如果(!(v10 31))V6=v11;V7=(A1)-新字符串utf (a1,V6);标准:字符串:3360至字符串(v10标准:字符串:3360至字符串(12节;STD:3360 _ vector _ base STD 33603360 string:~ _ vector _ base(v 13);标准:字符串:3360至字符串(15节;标准:字符串:3360至字符串(16节;STD:3360 _ vector _ base STD 33603360 string:~ _ vector _ base(v 17);回归V7;对sha1加密只需了解一点
//sha1原型首选项和讯息摘要5一样是散列算法,核心是没有密钥。多余信息可自行查看https://en。Wikipedia.org/wiki/sha-1 int sha1 _ update(sha _ CTX * c,const void *data,无符号长镜头);//推测对应位置的sha1:3360add(a2、v6、V7);用弗里达脚本测试一下吧
//这是写的完整脚本,必须能摆出弗里达姿势哦。
functionhookjava((Java。执行)函数))var encrypt=Java。使用(com。金泽。mvm习惯。utils。本机实用程序)加密。实现=功能(str)控制台。log(Java input:)str)varret=this。加密)字符串;控制台。log(Java输出:)ret返回;}函数hook () varbase=module.find基址(lib _ so);//sha 1:3360 addvaroffset=base。add(0xf 075);interceptor.attach(offset,{ onenter:function args)控制台。日志)本机:)内存。read cstring)参数函数main ((interceptor.atttach ) if(路径ptr!==无条件路径ptr!=null(varpath=ptr ) pathptr).readCString);//console.log(dlopen:,path);如果(!这个。path(return)if)路径。的索引)lib _ so)=0){ this。can _ hook _ libart=trueconsole.log([dlopen:])、path);}、休假:函数(retval)if)this。can _ hook _ libart!is _ hook _ libart(hook);is _ hook _ libart=true} }拦截器。附加(模块。findexportbyname)null, android_dlopen_ext ,{ onenter 3360 function } Android==无条件路径ptr!=null(varpath=ptr ) pathptr).readCString);//控制台。log(Android _ dlopen _ ext:),路径);如果(路径。(lib _ so)=0的索引){ this。can _ hook _ libart=true控制台。log([Android _ dlopen _ ext:])、path);}、休假:函数(retval)if)this。can _ hook _ libart!is _ hook _ libart(hook);is _ hook _ libart=true } }} set immediate(钩子Java)set immediate(main)之前分析过,返回的是base64,再次尝试解码
在原生:/api/movie,1614831596上重试sha1,结果与base64相同。分析过程结束~~~python脚本结束的傻瓜花~~~
from base64 importb 64 encodeimporthathashlibimporttimeimeimeimportrequestsdefsha 1(数据):m=hashlib。sha1)m .更新(数据。sta)=round)时间。time))text=f /API/movie,{ t } result=sha1)text)API/movie { t } token=b64 encode(text。编码().decode)(return tokendef main)):token=encrypt))URL=f https://appen offsed headers={ log-header : iamthelogrequestheader .# 主机 3360 AAA 连接 3360 保持活动用户代理 3360 ok http/3。10 . 0 headers=headers(print(resp .JSON ) ) if _ name _= _ main _ 3330
这篇文章由ogli324原创。欢迎分享这篇文章。转载请留下出处