- 博客(72)
- 资源 (5)
- 收藏
- 关注
原创 Google在架ab包分析-巴西
同样在so的导出函数里面可以直接找到Java_com_vdsfwe_gdsrew_dsfgdsfds_HttpsStartRun_run 函数。再次回到so 找到Java_com_vdsfwe_gdsrew_dsfgdsfds_HttpsEndRun_run。直接联网请求获取b面地址,用的是三方的api,mockapi.io,请求返回的b面地址和adjust事件码。用的三方api ,ip-api.com 查询ip归属地,判断countryCode。10w+ 下载量,在架2周。joinB 就是进b面,
2025-04-28 11:28:36
180
原创 Google在架包分析-印度2
入口是CordovaActivity ,那就是Cordova 加载的h5 ,可以推断Assets目录下的加密文件是h5。因为已经大概猜到了so的作用是解密Assets目录下的文件,就简单看下so,直接jeb看懒得开ida了。因为A面小游戏一般都是非常简单的单机游戏,所有抓到的请求一般就是获取b面地址的或者直接是跳转b面的。定位到请求的代码,注释的代码是b面地址 和上面抓包返回的地址一致。调native方法,估计就是解密Assets目录下文件的。果然就是解密Assets目录下的文件的,算法是xxtea。
2024-12-19 11:35:48
176
原创 Google在架包分析-印度1
包里面直接有adjust ,那应该就不是像巴西的那种加载子包的方案了,应该是直接集成的包。直接请求得到一个js 文件,看了下没啥用,全是垃圾代码。想到应该是有判断ip,根据ip归属地返回不同的js文件。还是同样的请求,这次就返回了进b面的核心代码的js文件。代码很清晰,还有注释,这个没啥好分析的,代码简单明了。巴西市场感觉不行了,没啥包了,找个印度市场的包分析。看包结构 cocos 打包的 Android h5。没别的代码了,那ab切换肯定是在 h5 的代码里面。因为是印度市场的包,挂印度代理试下。
2024-12-18 18:02:20
392
原创 Google在架包分析-巴西8
ContentProvider 的 onCreate 是代码入口,启线程加载so,调用native方法。看到apk 大小就感觉是之前分析过的方案,jeb看了下代码果然是的。Assets 下的data.db 是加密的子包文件。so的代码和之前分析的包基本的一样的。桌面棋牌榜看到这个兔子包。
2024-12-18 10:53:25
234
原创 Google在架包分析-巴西7
1、获取NetworkInterface.getName 判断是否有"tun" 或 “ppp” , 就是判断是否挂代理。index.css 文件jeb 解析是正常的css文件,看不出来是加密的子包文件,丢到010Edit就能看到了。取css后的数据 base64 解码后存到 Zesty.css。读取Assets目录下的www/css/index.css。丢到jeb大概看了下就发现是之前分析过的方案。请求有检测ip,必须巴西ip才能返回b面地址。正常的css 文件 ,后面写入的加密数据。
2024-12-17 17:56:39
536
原创 Google在架包分析-巴西6
代码里没有adj 和af 这些sdk ,估计又是一个加载子包的方案,不同是放到unity代码里去加载子包。从私有目录下的files 里面找到b面子包文件。jeb 反编译apk 看了下是unity的包。休息游戏榜里找的一个老虎包。有adjust 和 af。看着运行是直接进b面。请求里面获取b面地址。
2024-12-17 11:28:22
320
原创 Google在架包分析-巴西5
这个方法的执行时机是Application attachBaseContext 之后,Application onCreate之前。1、代码入口是一个ContentProvider 的onCreate。这个包方案和之前分析的巴西2 ,巴西3 是一套方案,这里就不分析了。安装运行又是直接进B面了,再大概看了下,又是之前分析过的方案。比之前放在Application 执行,隐蔽性稍强。今天在冒险游戏里面看到一个牛头很显眼,就选择它了。从Assets下读取加密的子包文件解密加载。3、so加载B面子包。
2024-12-16 15:23:23
139
原创 frida hook DexClassLoader导出子包
这里是一个通用的模版,可以根据hook的apk 按需求修改,这个会hook非常多的class, 可以按需求判断loadClass 后再去保存dex。逆向分析的时候会碰到有些apk会动态加载子包,加载完之后就删掉,导致没办法找到子包进行分析。于是写了一个frida 脚本,获取动态加载的子包重命名报错,这样就不会被删掉。
2024-12-14 17:53:39
308
原创 frida打印日志字体加颜色
平时写frida hook 脚本,有时打印出来的日志太多都是一个颜色不美观。logWithColor(“log带颜色” , GREEN);于是找AI 问了一下frida打印日志字体加颜色的方法。// ANSI 转义码。
2024-12-14 17:44:53
196
原创 Google在架包分析-巴西4
FManager 就是B面集成的常规套路了,调adjust ,调webview 加载b面地址,然后提供js接口这些东西。安装运行,刚开始还是进的A面小游戏,然后我说来抓个包看下,重新打开了一下app,结果直接就B面了,给我整不会了。和第一个子包差不多一样的流程,timeFun时间更早了一些,第一个时间判断过了这里肯定也是能过了。1、根据isDown 的值判断是否需要下载第3个子包,1 是不下载,其他值则是下载。第3个子包就是B面集成包了,有adjust ,webview 这些必不可少的东西。
2024-12-14 17:26:47
1922
原创 Google在架包分析-巴西3
简单的看了下,发现和上一个分析的包是一样的方案,应该是一家公司做的包。这个包是在应用榜找的,也是看图标很显眼就选择了它。一样的方案就不继续分析了,直接看上一篇就行了。
2024-12-14 10:43:14
342
原创 Google在架包分析-巴西2
私有目录的flies目录下找到子包apk文件 CommonLawTextbook , 可以看到Assets目录下的wisdom-wits.db 文件和 CommonLawTextbook 大小一样。说明wisdom-wits.db 是 子包的加密文件,从Assets目录下读取wisdom-wits.db 解密得到 CommonLawTextbook 子包apk , 这点和上一篇分析的包的逻辑差不多,都是加载资源文件解密得到apk 子包。发送请求,从服务端获取b面地址,切b面的判断在这个请求的参数里面。
2024-12-14 09:54:53
1273
原创 Google在架包分析-巴西1
初始化adjust , 启线程发送请求,从返回值里面解析得到b面地址,然后webview 加载b面地址。Assets 文件下一看就是cocos 打包的h5 小游戏,用Cordova框架加载的。包是前几天挑的,上点点数据-巴西游戏榜赌场游戏-人气蹿升里面找的一个包。调用a.r 读取子包文件,文件放在cocos游戏的资源目录下面。在该包的私有目录下找到生成的子包apk文件 , 直接导出来分析。1、安装运行看下,直接进的a面小游戏。正常进小游戏就完了,后面又启个线程肯定是进b面的。随便挑都是ab面的,懂的都懂。
2024-12-12 16:45:27
1055
原创 js逆向初探- Android h5逆向分析
主要就是通过webview 加载本地 h5, 另外这个包是使用cordova 三方框架加载的h5 , 核心还是调用的webview加载。安装Debugger for Chrome 扩展,这步可忽略,一般已经安装js debug扩展。在您的 JavaScript 文件中,单击行号左侧的空白区域以设置断点。使用 File -> Open Folder 打开您的项目文件夹。Chrome 的开发者工具(按 F12 或右键点击页面并选择“检查”)1、apk解压导出www文件夹, 在项目目录中打开命令行或终端。
2024-12-12 15:33:29
1471
原创 Native开发与逆向第七篇 - base64
本文主要是逆向分析Base64编码过程。通过自己写demo实现Base64编码,然后通过IDA逆向so分析其流程。
2024-11-27 18:39:04
733
原创 Android逆向题解- Phishing is not a crime-2
signed_body” 的值是调用下面这个b方法加密的,b方法又调用的getSignatureString方法。继续分析 getSignatureString方法,是一个native函数,在stings.so里。hook crypto_auth_hmacsha256_init 打印第2个参数的值。先hook 下b方法打印下参数和返回值看看加密内容。根据题目意思 搜索"signed_body"尝试几次这个加密结果是变化的不是flag。
2024-11-27 14:48:03
436
原创 Android逆向题解- ill-intentions
android hooking watch class_method xxx --dump-args --dump-backtrace --dump-return 打印参数返回值。IsThisTheRealOne 是正确的activty ,flag 是 CTF{IDontHaveABadjokeSorry}android intent launch_activity XXX 启动指定Activity。Send_to_Activity 分别启动3个Activity。使用objection 即可。
2024-11-26 15:24:38
477
原创 Android逆向题解-攻防世界- easy-app(太湖杯)
Android逆向so分析TEA算法和魔改base64算法;利用sktrace配合arm指令逐行分析代码逻辑。
2024-11-23 19:06:59
1187
原创 Native开发与逆向第六篇 -字符串加密与hook
Module.getExportByName 通过导出函数名hook,当然也可以计算地址hook。hook StrToHex 和 HexToStr 这两个函数打印字符串。写一个简单的字符串加密处理,将字符串字符转成ASCII十六进制值。转换后:48656C6C6F2066726F6D20432B2B。运行打印结果:可以看到参数1就是明文字符串。我这里还顺带hook打印了sp 和 x1。明文:Hello from C++找到这两个函数的导出函数名。
2024-08-31 15:43:03
798
原创 Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars
通过GetStringUTFChars 获取java层传入的字符串参数。目标hook GetStringUTFChars 打印字符串。运行打印结果:参数和返回值都正常打印出字符串。
2024-08-31 09:37:39
498
原创 Native开发与逆向第三篇 - hook JNI函数NewStringUTF
Pixel 3a::com.mycode.nativehello ]-> env : 0x7d44041250 param1 Hello from C++ , 这是动态注册。addr_NewStringUTF retval : Hello from C++ , 这是动态注册。目标是hook NewStringUTF 打印字符串。运行打印结果:参数和返回值都正常打印出来字符串。
2024-08-30 18:08:27
744
原创 Native开发与逆向第二篇 - 动态注册函数逆向
前面JNI_OnLoad里面调了两次sub_6454 ,第四个参数是注册的方法数量,也就是NativeUtils类注册了13个方法,AVLA类注册了32个方法。sub_6454 的三个参数就是函数的JNINativeMethod结构体,里面就是动态注册函数的方法名,方法签名和对应的实现的函数地址。在方法名、方法签名等没有处理的情况下,通过静态分析也能很清楚的看到动态注册的对应函数。同样的 off_24190 是32个动态注册的函数,这里截图只截取部分。直接找到JNI_OnLoad。类名没处理,直接是明文。
2024-08-30 12:46:27
716
原创 adb install
adb install -d 允许进行降级安装,也就是安装的比手机上带的版本低。adb install -r 替换已存在的应用程序,也就是说强制安装。adb install -g 为应用程序授予所有运行时的权限。adb install -s 把应用程序安装到sd卡上。adb install -l 锁定该应用程序。adb install -t 允许测试包。
2024-08-24 16:46:59
625
1
原创 Google 广告id流程分析
搜索上面的接口 “com.google.android.gms.ads.identifier.internal.IAdvertisingIdListener”adb shell pm path com.google.android.gms 搜索安装包路径,然后包apk pull出来分析。这个包也只是提供了一个获取的接口,实际生成不在这个包里面。
2024-08-24 15:44:53
903
原创 admob 广告分析
1、测试广告集成,官方文档 https://developers.google.com/admob/android/quick-start?4、Layout Inspector查看布局。2、广告集成,集成测试激励广告。3、查看广告activity。
2024-08-20 22:05:33
358
原创 Android逆向题解-攻防世界-Ph0en1x-100
主要代码是if 那个判断,getFlag取字符串用getSecret加密,和输入字符串encrypt加密后再getSecret加密,进行比较,两边同样都是getSecret加密,那比较可以简化成this.getFlag() == this.encrypt(s)。也就是输入字符经过encrypt加密后等于getFlag的字符串即可。直接上objection 获取到getFlag的返回值:ek。qanqntfg^E`hq|,每个字符+1;ida看下encrypt 的实现。
2024-08-20 15:40:06
736
原创 Android逆向题解-攻防世界easyso
还原过程就是指定的字符串“f72c5a36569418a20907b55be5bf95ad”先单双位互换得到“7fc2a5636549812a90705bb55efb59da”直接反编译看伪代码,代码比较简单直接手撕即可,循环走一两遍就可以知道整个逻辑了。然后单双位互换,0,1互换,2,3互换,4,5互换。核心逻辑都在so里面的CheckString函数。整理逻辑流程就是输入字符串前16位与后16位互换。然后前16位与后16位互换得到。最后与指定字符串比较。
2024-08-19 22:50:02
453
原创 Native开发与逆向第一篇-字符串
Android studio新建一个Native C++项目。默认代码就是调用Native 方法stringFromJNI 返回一个字符串。
2024-08-19 11:35:15
660
原创 LSPosed模块开发第二篇 hook Webview
hook webview的loadUrl方法,打印webview加载的地址,修改参数将地址换成指定的url。
2024-08-18 21:49:25
931
1
原创 常用adb命令
adb connect :端口号:adb连接某设备(通常针对offline设备)adb disconnect :端口号 :adb断开某设备。adb pull /sdcard/two.mp4 ./ 导出视频。adb push pc文件路径 手机文件路径。adb pull 手机文件路径 pc文件路径。adb start-server:重启adb。adb kill-server:杀死adb。adb install apk路径。ctrl +c 退出录制。
2024-08-16 23:59:40
145
原创 配置frida脚本环境代码提示自动补全
https://nodejs.org/en/ 官网下载安装,无脑安装即可。在agent 下面写js 脚本就有代码提示了。
2024-08-15 23:13:14
778
原创 Android逆向题解-Illusion-难度6
注意这里有一个陷阱,CheckFlag有静态注册函数和动态注册函数,会执行动态注册的函数。s 是用户输入,s1 是加密后flag: Ku@'G_V9v(yGS。sub_1028 看着花里胡哨的,实际执行结果就是 a1/a2;代码可以直接复制到idea,调试跟着过一遍就清楚了。传入Native函数 CheckFlag。a2 == 93 只会走sub_1028。
2024-08-15 22:33:01
369
原创 Android逆向题解攻防世界-RememberOther
userName MD5之后每2位取一个值与sn比较,userName 和 sn 都是用户输入类似注册机,这和flag不沾边。直接跳过看后续成功之后是Toast打印 “md5:b3241668ecbeb19921fdac5ac1aafa69”最后flag是 YOU_KNOW_ANDROID。
2024-08-14 11:40:16
222
Native开发与逆向第七篇 - base64 demo的sktrace文件
2024-11-27
Native开发与逆向第七篇 - base64 , demo源码
2024-11-27
Android逆向,frida hook脚本,hook测试demo的加密字符串
2024-08-31
Android native开发,实现log打印,简单的字符串加密处理
2024-08-31
Android 逆向frida hook log的脚本
2024-08-31
Android ndk 开发测试demo,动态注册函数的实现
2024-08-30
frida hook jni 函数 NewStringUTF 打印参数和返回值字符串
2024-08-30
java base64 修改码表实现编码和解码
2024-08-21
Android逆向-frida hook 脚本- hook webview
2024-08-17
ollvm 13.x 编译后的clang , 替换ndk里面的clang 即可直接使用ollvm
2024-08-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人