![]() 本文由掌控安全学院 - 我是大白 投稿来Track安全社区投稿~ 千元稿费!还有保底奖励~(https://bbs.) 前言某APP,访问后为APP下载页面,从而下载到目标APP进行分析。 安装frida,上传frida-server
下载frida-server,这里需要与你python安装的frida版本一致,并且需要查看模拟器架构
![]() img 上传frida-server(没连接设备记得先adb connect 连接设备,这里不赘述了)
![]() img 启动frida-server,(frida-server是我自己进行了一下重命名)
另起一个cmd,查看模拟器进程以验证frida是否连接成功:有进程相关信息即成功连接。 frida 实战测试frida-ps -Ua ![]()
![]() frida -U -f 'calm.pjtuep.zzdokmht' -l hook_key.js # 使用-f参数会重新载入APP,加载hook脚本,退出可输入exit回车即可。 ![]()
public static String b(String str) { try { byte[] bytes = str.getBytes(); // 获取字符串的字节数组 byte[] bytes2 = '0nxG8fD2kqlrEv5M'.getBytes(C.UTF8_NAME); // AES 密钥 byte[] bytes3 = 'u0r3GcsdXsYmAfhT'.getBytes(C.UTF8_NAME); // AES IV SecretKeySpec secretKeySpec = new SecretKeySpec(bytes2, 'AES'); // 生成密钥 IvParameterSpec ivParameterSpec = new IvParameterSpec(bytes3); // 生成 IV Cipher cipher = Cipher.getInstance('AES/CBC/PKCS5Padding'); // 使用 AES-CBC cipher.init(1, secretKeySpec, ivParameterSpec); // 1 = 加密模式 return new String(Base64.encode(cipher.doFinal(bytes), 0)); // 加密后 Base64 编码 } catch (Exception e2) { e2.printStackTrace(); return ''; } }
![]() ![]() ![]() ![]() Burpy + firda 实现burp上自动加解密>>> import frida >>> frida.get_device_manager().enumerate_devices() [Device(id='local', name='Local System', type='local'), Device(id='socket', name='Local Socket', type='remote'), Device(id='barebone', name='GDB Remote Stub', type='remote'), Device(id='127.0.0.1:16384', name='PGBM10', type='usb')]
![]() adb root adb shell ali:/data/local/tmp # ./frida-server
import frida import time from urllib.parse import unquote, parse_qs, quote import json class Burpy: # 初始化,获取模拟器进程,启动和连接进程 def __init__(self): device = self._get_android_usb_device() pid = device.spawn('calm.pjtuep.zzdokmht') # 进程包名 self.session = device.attach(pid) # 附加到目标进程 device.resume(pid) # 让进程继续运行 self.rpc = self.load_rpc() # 加载 RPC 脚本 # 获取模拟器设备 def _get_android_usb_device(self): for x in frida.get_device_manager().enumerate_devices(): if 'PGBM10' in x.name: # 根据设备名,返回设备相关信息。 print(f'设备信息=====> {x}') return x # 加载远程调用rpc的hook脚本文件 def load_rpc(self): # 这里打开的文件路径貌似只能写绝对路径,用相对路径会报错? with open('D:\\secTools\\BurpSuite V2023.2.2\\BurpSuite V2023.2.2\\Burpy\\js\\decrypt1.js',encoding='utf-8', errors='ignore') as f: script = self.session.create_script(f.read()) script.load() self.rpc = script.exports_sync time.sleep(3) # 等待APP加载完全 self.rpc.init() # 检测rpc调用 return self.rpc # 对body数据处理,只返回data字段的数据 def convert_to_json(self, body): try: if body.strip().startswith('{') and body.strip().endswith('}'): json_body = json.loads(body) if 'data' in json_body: return json_body['data'] else: parsed_data = parse_qs(body) return parsed_data['data'][0] except Exception as e: print(f'转换失败:{str(e)}') return None # 重新构建请求和响应body,方便发包和查看响应 def rebuild_body(self, body, data): try: if body.strip().startswith('{') and body.strip().endswith('}'): json_body = json.loads(body) if 'data' in json_body: json_body['data'] = data # print(str(json_body).encode('gbk').decode('gbk')) return str(json_body).encode('gbk').decode('gbk') # 在repeater中响应内容发生了中文乱码,不清楚为啥? else: parsed_data = parse_qs(body) string_body = 'timestamp=' + str(parsed_data['timestamp'][0]) + '&' + 'data=' + data + '&' + 'sign=' + str(parsed_data['sign'][0]) return string_body except Exception as e: print(f'转换失败:{str(e)}') return None # 加密函数 def encrypt(self, header, body): try: process_data = self.convert_to_json(body) enc_data = self.rpc.enc(process_data) body = self.rebuild_body(body, enc_data) except Exception as e: print(f'无法找到 enc 方法:{str(e)}') return header, body # 解密函数 def decrypt(self, header, body): try: process_data = self.convert_to_json(body) dec_data = self.rpc.dec(process_data) body = self.rebuild_body(body, dec_data) except Exception as e: print(f'无法找到 dec 方法:{str(e)}') return header,body 一些奇怪的问题![]() ![]() 一些概念解释什么是frida?![]() 什么是hook技术?
![]() 为什么要进行adb forward转发端口?adb forward tcp:27042 tcp:27042 和类似的命令用于将 Android/模拟器 设备上的端口(如 27042)映射到主机上的相应端口。这对于 frida 来说是必要的,因为 Frida 通过网络端口进行通信,尤其是当它在远程设备或模拟器上运行时。解释:adb forward 命令:此命令将设备上的端口转发到主机上的端口。它创建了一条通过 ADB 连接的端口映射路径。27042 和 27043 端口:frida-server 会在 Android 设备上启动并监听特定的端口(通常是 27042),用于与主机上的 frida 客户端进行通信。27043 也常用来进行附加连接,尤其是如果你在多个进程或服务之间进行交互时。为什么需要转发端口?frida-server 通信:Frida 客户端需要与 frida-server 进行通信,通常会通过 TCP/IP 端口进行交互。adb forward 命令通过将端口转发到主机上的相应端口,允许主机上的 Frida 客户端与 Android 设备上的 frida-server 进行通信。frida-server 在设备上运行时,它会监听设备上的端口(例如 27042)。adb forward 允许你从主机访问该端口,就像你直接连接到设备一样。通过这种方式,你可以控制设备上的进程,进行 hook 操作,调试等。frida-server 在 Android 设备上运行并监听 27042 端口。frida 客户端通过该端口与设备通信。如果没有端口转发,主机就无法访问设备上的 frida-server ,导致无法进行 hook 操作或与设备进行其他调试任务。参考申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径, 所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法. |
|
来自: 新用户0118F7lQ > 《待分类》