当前位置: 首页 > wzjs >正文

上海网站建设培训学校大良网站制作

上海网站建设培训学校,大良网站制作,做文具的网站,公司网站备案怎么弄免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

工具下载:

链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89

提取码:zy89

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:26.安卓逆向2-frida hook技术-解密响应

app使用java语言开发的,但是有些加密算法为了增加破解难度它会使用java中的jini协议使用c/c++语言来实现加密算法,c/c++编译完之后的文件就是os文件

再来看一个app,它的请求里有一个sign加密字段

然后右击选择 Copy cURL Request

然后百度搜索curl转Python 在线工具,把上方复制的curl转成Python去调用,然后会返回430说参数错误,这个愿意就是里面有加密参数(签名)没有去获取或加密参数已过期,导致请求被服务器拦截了,相同的请求,我们不认识的数据,然后还会变化的一般就是签名,这种的需要逆向分析出加密方式,我们自己使用代码模拟一个然后再去调用请求,这个app的签名是 sign 然后接下来就去源码中找sign

然后这个app也需要砸壳,之前使用的是frida-dexdump进行的砸壳,这次用个不一样的,使用脚本文件砸壳,它的原理是利用安卓系统的libart.so从内存里查询有没有加载dex文件

开源脚本:https://github.com/lasting-yang/frida_dump/blob/master/dump_dex.js

/*** 获取当前进程的名称(包名)* @returns {string} 进程名称,如果失败则返回"-1"*/
function get_self_process_name() {// libc.so是C标准库的共享库,包含了基本的文件操作函数// open函数用于打开文件,返回文件描述符var openPtr = Module.getExportByName('libc.so', 'open');var open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);// read函数用于从文件描述符读取数据var readPtr = Module.getExportByName("libc.so", "read");var read = new NativeFunction(readPtr, "int", ["int", "pointer", "int"]);// close函数用于关闭文件描述符,释放资源var closePtr = Module.getExportByName('libc.so', 'close');var close = new NativeFunction(closePtr, 'int', ['int']);// 读取/proc/self/cmdline文件获取当前进程名var path = Memory.allocUtf8String("/proc/self/cmdline");var fd = open(path, 0);if (fd != -1) {var buffer = Memory.alloc(0x1000);var result = read(fd, buffer, 0x1000);close(fd);result = ptr(buffer).readCString();return result;}return "-1";
}/*** 创建目录(如果不存在)* @param {string} path - 要创建的目录路径*/
function mkdir(path) {// libc.so提供的mkdir函数用于创建目录// 第二个参数755表示目录权限(rwxr-xr-x)var mkdirPtr = Module.getExportByName('libc.so', 'mkdir');var mkdir = new NativeFunction(mkdirPtr, 'int', ['pointer', 'int']);// opendir函数用于打开目录,检查目录是否已存在var opendirPtr = Module.getExportByName('libc.so', 'opendir');var opendir = new NativeFunction(opendirPtr, 'pointer', ['pointer']);// closedir函数用于关闭目录句柄var closedirPtr = Module.getExportByName('libc.so', 'closedir');var closedir = new NativeFunction(closedirPtr, 'int', ['pointer']);var cPath = Memory.allocUtf8String(path);var dir = opendir(cPath);if (dir != 0) {closedir(dir);return 0; // 目录已存在}mkdir(cPath, 755); // 创建目录chmod(path); // 确保目录权限正确
}/*** 修改文件或目录的权限* @param {string} path - 要修改权限的文件或目录路径*/
function chmod(path) {// libc.so提供的chmod函数用于修改文件权限var chmodPtr = Module.getExportByName('libc.so', 'chmod');var chmod = new NativeFunction(chmodPtr, 'int', ['pointer', 'int']);var cPath = Memory.allocUtf8String(path);chmod(cPath, 755); // 设置为rwxr-xr-x权限
}/*** 从内存中提取Dex文件*/
function dump_dex() {// libart.so是Android Runtime的核心库// 负责Java/Kotlin代码的执行、类加载、内存管理等底层操作var libart = Process.findModuleByName("libart.so");var addr_DefineClass = null;// 枚举libart.so中所有导出的符号(函数和变量)var symbols = libart.enumerateSymbols();for (var index = 0; index < symbols.length; index++) {var symbol = symbols[index];var symbol_name = symbol.name;// 查找ClassLinker::DefineClass函数// 这个函数在类加载时被调用,传入DexFile对象if (symbol_name.indexOf("ClassLinker") >= 0 &&symbol_name.indexOf("DefineClass") >= 0 &&symbol_name.indexOf("Thread") >= 0 &&symbol_name.indexOf("DexFile") >= 0) {console.log(symbol_name, symbol.address);addr_DefineClass = symbol.address;}}var dex_maps = {}; // 存储已提取的Dex文件,避免重复var dex_count = 1;console.log("[DefineClass:]", addr_DefineClass);if (addr_DefineClass) {// 使用Frida的Interceptor拦截DefineClass函数调用// 当函数被调用时,我们可以获取其参数和返回值Interceptor.attach(addr_DefineClass, {onEnter: function(args) {// args[5]是DexFile对象指针(根据函数签名确定)var dex_file = args[5];// 解析DexFile对象的内存布局// DexFile对象包含Dex文件的基地址和大小信息var base = ptr(dex_file).add(Process.pointerSize).readPointer();var size = ptr(dex_file).add(Process.pointerSize + Process.pointerSize).readUInt();if (dex_maps[base] == undefined) {dex_maps[base] = size;var magic = ptr(base).readCString();if (magic.indexOf("dex") == 0) { // 验证Dex文件魔数var process_name = get_self_process_name();if (process_name != "-1") {/**创建以包名命名的目录存储提取的Dex文件要注意一定要找权限高的目录(可读可写,不知道怎么找就跟着笔记中用的目录来),否则会下载dex失败*/var dex_dir_path = "/data/data/" + process_name + "/files/dump_dex_" + process_name;mkdir(dex_dir_path);var dex_path = dex_dir_path + "/class" + (dex_count == 1 ? "" : dex_count) + ".dex";console.log("[find dex]:", dex_path);// 使用JavaScript File API将内存中的Dex内容写入文件var fd = new File(dex_path, "wb");if (fd && fd != null) {dex_count++;var dex_buffer = ptr(base).readByteArray(size);fd.write(dex_buffer);fd.flush();fd.close();console.log("[dump dex]:", dex_path);}}}}},onLeave: function(retval) {}});}
}
dump_dex()

效果图:

安卓目录里面

MT管理器

这个开源脚本还有下载os文件的方式

然后使用脚本砸壳玩后默认放到/data目录里,在手机里,还需要拷贝到电脑上,然后这个data目录它没有权限,所以需要先把dex文件移动到一个有权限的位置,使用mv命令移动文件到 /sdcard/Download/ 目录中,这个可以改一下脚本代码中 dex_dir_path 变量的值,要注意一定要找权限高的目录 ,否则会下载dex失败

mv dump_dex_com.xxxx.news /sdcard/Download/

然后使用adb命令把目录下载到电脑上

adb pull /sdcard/Download/dump_dex_com.xxx.news ./

执行命令

效果图:

然后全选拖到jadx中可以分析了

到这就脱壳完毕,现在有两种脱壳方式,推荐用frida-dexdump,因为它不需要手动把dex文件放到电脑上,比较省事


img

http://www.dtcms.com/wzjs/796728.html

相关文章:

  • golang 网站开发 开源设计网站用什么语言
  • 网站建设时 网站信息可以边建设边组织响应式网站的优缺点
  • 新手做网站盈利seo快速推广窍门大公开
  • 网站的绝对路径公司部门撤销要求转岗不同意怎么办
  • 免费网站空间哪个好中山网站制作定制
  • 建网站衡水哪家强?长沙企业推广
  • 泰州网站建设哪家好北京专业的做网站
  • 网站建设联系方式免费企业网站模板psd
  • 平台网站怎么推广wordpress教程php二次开发
  • 北京的制作网站的公司有哪些网站制作实训
  • 百度上找不到网站深圳网站搜索引擎优化
  • 厦门礼品网站商城制作案例做pc网站排
  • 江西工厂网站建设做好网络推广
  • 上海外贸网站建设公司南昌盗网站少优化公司
  • 做淘客网站 备案东莞专业网站推广策划
  • 餐饮网站建设设计价格口碑好的盐城网站建设
  • 网站建设公司需要交税么北京公司地址
  • 做电商需要哪些网站网站开发表格
  • 用路由器做网站搜图片找原图
  • 盛锡福网站中国建设银行山东省分行网站
  • 制作网站的完整步骤学做简单网站视频教程
  • 简述网站的建设流程图官网免费下载
  • iis网站找不到网页广西桂林网站建设
  • 手机门户网站模板推荐6个国外自媒体平台
  • 定制高端网站建设公司上海英文网站建设
  • 做网站要霸屏吗继续教育网站怎么做不了作业
  • 网址导航类网站怎么做网店代运营排名
  • 哪个网站做ppt好wordpress 百度搜索图片
  • 电商直播培训全能优化大师
  • 现在公司网站重要吗做物流网站费用