首页
文章分类
逆向网安
中英演讲
杂类教程
学习笔记
前端开发
汇编
数据库
.NET
服务器
Python
Java
PHP
Git
算法
安卓开发
生活记录
读书笔记
作品发布
人体健康
网上邻居
留言板
欣赏小姐姐
关于我
Search
登录
1
利用AList搭建家庭个人影音库
4,655 阅读
2
浅尝Restful Fast Request插件,一句话完成 逆向过程
3,944 阅读
3
完美破解The Economist付费墙
2,713 阅读
4
i茅台app接口自动化csharp wpf实现,挂机windows服务器每日自动预约
2,606 阅读
5
青龙面板基本使用并添加修改微信/支付宝步数脚本
2,030 阅读
Search
标签搜索
PHP
Laravel
前端
csharp
安卓逆向
JavaScript
Python
Java
爬虫
抓包
Git
winform
android
Fiddler
Vue
selenium
LeetCode
每日一题
简单题
docker
Hygge
累计撰写
95
篇文章
累计收到
445
条评论
首页
栏目
逆向网安
中英演讲
杂类教程
学习笔记
前端开发
汇编
数据库
.NET
服务器
Python
Java
PHP
Git
算法
安卓开发
生活记录
读书笔记
作品发布
人体健康
页面
网上邻居
留言板
欣赏小姐姐
关于我
用户登录
搜索到
2
篇与
的结果
2023-07-26
第四篇Android逆向:动态调试&Log插桩
一、基本概念1.1 动态调试动态调试是指自带的调试器跟踪自己软件的运行,可以在调试的过程中知道参数或者局部变量的值记忆捋清代码运行的先后顺序。多用于爆破注册码(CTF必备技能)1.2 Log插桩Log插桩是指在反编译APK文件时,在对应的smali文件里,添加相应的smali代码,将程序的关键信息,以log日志的形式进行输出。二、动态调试2.1 修改debug权限方法一:在AndroidManifest.xml里添加可调试权限android:debuggable="true"方法二:XappDebug模块hook对应的app项目地址XappDebughttps://github.com/Palatis/XAppDebug方法三:Magisk命令(重启失效)1. adb shell # adb进入命令行模式 2. su # 切换至超级用户 3. magisk resetprop ro.debuggable 1 4. stop;start; # 一定要通过该方式重启方法四:刷入MagiskHide Props Config模块(永久有效)一般来说,在4选项中如果有ro.debuggable那就直接修改没有的话就选5修改ro.debuggable的值为12.2 端口转发以及开启adb权限版本后点击七次开启开发者模式并开启adb调试权限夜神模拟器: adb connect 127.0.0.1:620012.3 下端点Jeb里使用ctrl + b下断点2.4 debug模式启动adb shell am start -D -n com.zj.wuaipojie/.ui.MainActivity adb shell am start -D -n 包名/类名am start -n 表示启动一个activityam start -D 表示将应用设置为可调试模式2.5 Jeb附加调试进程快捷键作用F6进入方法F7从方法中跳出来F8 R运行到光标处三、修改debug权限实操3.1 修改AndroidManifest3.2 XAppDebug模块3.3 Magisk命令上文3.4 MigiskHide Props Config安装模块打开Mt管理器终端模拟器输入props进入模块然后按照上文操作即可四、追码练习4.1 开发者选项开启USB调试,目标App要开启Debug调试4.2 apk拖入JEB,搜索关键字密钥错误发现关键点是if(this.check(((EditText)this.findViewById(0x7F0800AC)).getText().toString())) { // id:edit_check Context context0 = (Context)this; Toast.makeText(context0, "恭喜你,密钥正确!", 1).show(); SPUtils.INSTANCE.saveInt(context0, "level", 3); return; } Toast.makeText(((Context)this), "密钥错误哦,再想想!", 1).show();4.3 继续追check方法,双击方法名进入public final boolean check(String s) { int v = 0; Integer integer0 = null; if(!StringsKt.startsWith$default(s, "flag{", false, 2, null)) { return false; } if(!StringsKt.endsWith$default(s, "}", false, 2, null)) { return false; } String s1 = s.substring(5, s.length() - 1); Intrinsics.checkNotNullExpressionValue(s1, "this as java.lang.String…ing(startIndex, endIndex)"); String s2 = SPUtils.INSTANCE.getString(((Context)this), "id", ""); if(s2 != null) { integer0 = (int)s2.length(); } int v1 = 1000; Intrinsics.checkNotNull(integer0); int v2 = (int)integer0; if(v2 >= 0) { while(true) { v1 += -7; if(v == v2) { break; } ++v; } } byte[] arr_b = Encode.encode(s2 + v1).getBytes(Charsets.UTF_8); Intrinsics.checkNotNullExpressionValue(arr_b, "this as java.lang.String).getBytes(charset)"); return Intrinsics.areEqual(s1, Base64Utils.INSTANCE.encodeToString(arr_b)); }首先密钥必须以flag{开头,以}结尾然后回取出除开头和结尾中间的内容和一个base64加密的字符串进行比对base64加密的数据是由s2(打开软件注册的用户名) + v1(整数常量组成),当s2固定时base64加密的结果也就固定了。下一步就需要对加密结果打断点4.4 app开启调试4.5 Jeb附加调试进程然后再去应用模拟验证一下已经成功断点了,右边的寄存器也能看到局部变量此时已拿到密钥:5YaF57OkDAUM五、Log插桩5.1 日志插桩dex注入5.2 代码关键处添加输出invoke-static {对应寄存器}, Lcom/mtools/LogUtils;->v(Ljava/lang/Object;)V5.3 使用算法助手查看日志然后启动 去触发一下关键点拿到密钥实战反编译发现程序逻辑如下:可以直接通过程序跑出来结果:let str = 'e10adc3949ba59abbe56e057f20f883e'; // 对 123456 进行md5 再转 十六进制的结果 let sb = '' for(let i = 0;true;i+=2){ if(i >= str.length){ console.log(sb); return sb == '123'; } // 将 str i位置上的字符追加到sb中 sb += str.charAt(i); }引用1.《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩:https://www.52pojie.cn/thread-1714727-1-1.html2.吾爱破解安卓逆向入门教程《安卓逆向这档事》五、1000-7? & 动态调试&Log插桩:https://www.bilibili.com/video/BV1hg411q7dj/3.JEB动态调试Smali-真机/模拟器(详细,新手必看):https://www.52pojie.cn/thread-1598242-1-1.html4.Log简易打印工具,超简单的调用方法:https://www.52pojie.cn/thread-411454-1-1.html5.Android修改ro.debuggable 的四种方法:https://blog.csdn.net/jinmie0193/article/details/111355867
2023年07月26日
375 阅读
0 评论
0 点赞
2023-07-23
第一篇Android逆向:App双开、汉化、基本内容修改
一、基本概念1.1 Magisk介绍Magisk 是一套用于定制 Android 的开源软件,支持高于 Android 5.0 的设备。以下是一些功能亮点:MagiskSU:为应用程序提供 root 访问权限Magisk 模块:通过安装模块修改只读分区MagiskHide:从根检测 / 系统完整性检查中隐藏 Magisk(Shamiko)MagiskBoot : 最完整的安卓启动镜像解包和重新打包工具1.2 Apk结构apk 全称 Android Package,它相当于一个压缩文件,只要在电脑上将apk后缀改为zip即可解压。文件注释assets目录存放APK的静态资源文件,比如视频,音频,图片等lib 目录armeabi-v7a基本通用所有android设备,arm64-v8a只适用于64位的android设备,x86常见用于android模拟器,其目录下的.so文件是c或c++编译的动态链接库文件META-INF目录保存应用的签名信息,签名信息可以验证APK文件的完整性,相当于APK的身份证(验证文件是否被修改)res目录res目录存放资源文件,包括图片,字符串等等,APK的脸蛋由他的layout文件设计AndroidMainfest.xml文件APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等等信息classes.dex文件classes.dex是java源码编译后生成的java字节码文件,APK运行的主要逻辑resources.arsc文件resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源二、 双开及原理双开:简单来说,就是手机同时运行两个或多个相同的应用,例如同时运行两个微信原理解释修改包名让手机系统认为这是2个APP,这样的话就能生成2个数据存储路径,此时的多开就等于你打开了两个互不干扰的APP修改Framework对于有系统修改权限的厂商,可以修改Framework来实现双开的目的,例如:小米自带多开通过虚拟化技术实现虚拟Framework层、虚拟文件系统、模拟Android对组件的管理、虚拟应用进程管理 等一整套虚拟技术,将APK复制一份到虚拟空间中运行,例如:平行空间以插件机制运行利用反射替换,动态代理,hook了系统的大部分与system—server进程通讯的函数,以此作为“欺上瞒下”的目的,欺骗系统“以为”只有一个apk在运行,瞒过插件让其“认为”自己已经安装。例如:VirtualApp2.1 修改包名NT管理器安装包提取点击提取的Apk,选择APK共存修改包名简单情况下实现APK共存2.2 修改Framework2.3 通过虚拟化技术实现2.4 以插件机制运行三、 汉化APK汉化:使用专门的工具对外文版的软件资源进行读取、翻译、修改、回写等一系列处理,使软件的菜单、对话框、提示等用户界面显示为中文,而程序的内核和功能保持不变,这个过程即为软件汉化基本上字符串都是在arsc里,建议一键汉化,然后再润色。少量没汉化到的字符串参考视频中的方法定位去逐个汉化。3.1 流程图这里还需要注意的是,如果要直装应用,那就应该先签名安装,看看是否有签名校验导致的闪退简单的汉化有三个分支Arsc汉化Xml汉化Dex汉化教程中还提到较为复杂的so层面的字符串资源3.2 Xml汉化汉化前:1.全局搜索文件内容Hello 52pojie2.字符常量池打开资源文件3.字符串编辑4.更新并自动签名5.完成3.3 Arsc汉化接着替换下方的俄文,使用开发者助手检索界面资源复制文本后再次使用MT管理器进行搜索Я не могу поверить, что это работает, почему?选择翻译模式定位到要翻译的字符串后进行编辑完成汉化3.4 dex汉化这次要替换掉 Reverse determines height, development determines depth.这段文本还是先搜索再在Dex编辑器++中搜索直接进行替换即可完成汉化四、修改应用名称和图标4.1 初识AndroidManifest.xmlAndroidManifest.xml文件是整个应用程序的信息描述文件,定义了应用程序中包含的Activity,Service,Content provider和BroadcastReceiver组件信息。每个应用程序在根目录下必须包含一个AndroidManifest.xml文件,且文件名不能修改。它描述了package中暴露的组件,他们各自的实现类,各种能被处理的数据和启动位置。属性定义versionCode版本号,主要用来更新,例如:12versionName版本名,给用户看的,例如:1.2package包名,例如:com.zj.52pj.demouses-permission android:name=""应用权限,例如:android.permission.INTERNET 代表网络权限android:label="@string/app_name"应用名称android:icon="@mipmap/ic_launcher"应用图标路径android:debuggable="true"应用是否开启debug权限4.2 修改测试切换到NT管理器修改成功五、修改应用内图标对图中的表情包进行替换首先找到对应的布局文件,查看ImageView的资源ID:@7F0D000B使用Arsc编辑方式打开resources.arsc,搜索资源ID再去搜索first_img定位图片哦~原来first_img已经在对应资源图片了,那我直接修改它的映射关系改成D2.png完成引用1.《安卓逆向这档事》一、模拟器环境搭建:https://www.52pojie.cn/thread-1695141-1-1.html2.《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改:https://www.52pojie.cn/thread-1695796-1-1.html3.吾爱破解安卓逆向入门教程《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改:https://www.bilibili.com/video/BV18G411j7gV/?spm_id_from=333.788&vd_source=33cfe7dc102c64b5cac16bcfaad7f2a84.[更新!]适用于几乎所有安卓模拟器(7+)安装magisk的教程-简单无脑向:https://www.52pojie.cn/thread-1583586-1-1.html5.【VirtualAPP 双开系列08】如何实现多开 - UID:https://blog.csdn.net/u014294681/article/details/116270479
2023年07月23日
428 阅读
0 评论
0 点赞