大家知道app 有安卓和ios
安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的
IOS是ipa 今天我主要讲的是这个
 
准备好反编译设备
1.一套越狱的ios手机 我的设备是iphone6 ios8.3 已越狱
2.一个mac系统 可以是vmware上的mac 黑苹果 或者直接用自己的mac电脑 我为了方便就用了黑苹果(如何搞黑苹果可以看我之前发表的博客)
 
给大家看下我的环境吧:
 
 
准备反编译环境
1. 越狱手机上
1.1 Cydia上面安装 OpenSSH 安装成功后 可以remote到你的手机 默认的密码是 alpine
 
1.2 github上下载clutch然后放置在手机的 bin目录下(可以使用Itools工具)
解释一下这个工具是干什么的:如果app是直接从appstore下载的话 默认会被加密的 那么你用反编译工具IDA(下面会说到)的话就不行。得用这个工具解密生成一个ipa
2. mac机器上面准备好 LLDB Remote Debug 环境 (lldb是什么具体可以搜索Google)
2.1 配置Debug Server
从 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/ DeviceSupport/7.0.3\ \(11B508\)/DeveloperDiskImage.dmg 获得debugserver 然后复制到桌面(中间的那个 DeviceSupport 可以根据具体路径替换)
 
 
 
 
2.2 光有这个不行 还得弄下签名
创建一个 文件叫 Entitlements.plist 然后用 xcode打开进行编辑写入
 
输入命令 codesign -s - --entitlements entitlements.plist -f debugserver 之后 把这个 debugserver 传回 手机设备 的 /usr/bin/debugserver (可以使用Itools工具)
 
 
3. windows系统上安装反编译利器IDA工具,大家可以百度搜破解版
 
 
反编译实验开始
在mac系统上 ssh连接 手机设备
 
如果你的app是从appstore上下载的那么请先用clutch解密 【我这里就举了一个Discord程序的例子】
1 用clutch -i 命理 找到你安装的app的编号
2 用clutch -d 2命令进行解密操作
 
由于某头条我是从越狱版本Itools上下载的 本身就已经解密过了 所以不需要上面的操作
我直接用Itools导出ipa包
 
打开 Fiddler 进行抓包分析(如何配置手机代理请自行百度了)
打开app的注册页面
这里有一个获取验证码的图片的请求
请求的url里面有一个sign参数 一看就知道这个是md5加密
接下来我们就是要拿到这个md5是如何生成的
用IDA打开ipa包(第一次打开需要花点时间)
按SHift+F12打开 搜索String关键字 "sign"
 
双击进入
继续双击进入 Function
按 F5
这里我们可以得知 加密的类叫 BFCrytor 里面有一个 MD5方法
在Function列表搜索一下 果然有
好了 已经成功找到了 加密md5的类和方法名称了
 
接下来开始最重要的步骤了 要根据 类和方法名称找到 程序运行的 内存地址 然后对这个内存地址进行下断点
 
1.把ipa包copy到mac系统里面 然后 用 Class-DumpXApp -H -A -S -oheaders/
dump出来的头文件里面标记了 IMP 的地址 输入到 header文件夹
在该文件夹搜索刚刚我们找到的类名称 BFCryptor 用Xcode打开
 
记录下这个内存地址 0x0000000100241e30
 
lldb 挂载
用 px -a 命令找到 app 运行的 id
然后用命令执行挂载 执行完后 发现app被卡主了 一切都静止了
 
再打开另外一个bash 执行本地命令
> lldb> platform select remote-ios> process connect connect://iOSIP:8888
过一会儿就会看到下面这个就代表挂载成功
 
获取 ASLR 偏移量
 
 
那么 断线的内存地址 的算法 就是 基址 + 偏移量
也就是md5 方法的内存地址 = 0x00000000000fc000 + 0x0000000100241e30
用下面的命令进行下断点
 
断点下完后 执行 c 命令 让 app 跑起来 触发一个网络请求 就会发现 断点停下来的
用 po 命令打印参数 发现 arg3就是我们md5加密前的数据
接下来 就写一个模拟请求实验一下
 
 
请求成功了!!!!!
 
总结:
这篇文章给大家讲了 如何配置反编译环境
反编译一个app 拿到加密方式的一般步骤是怎样的。
md5的方式还是比较简单的,用rsa算法加密(例如国寿app,12306app等)的就比较难。但是方法都是一样的。
祝大家好运!

教你如何反编译app,拿到加密方式的更多相关文章

  1. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测

    android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测https://dev.bangcle.com/ 业内专业的应用加固服务供应商 帮助数十万APP抵御破解风险,早 ...

  2. 反编译APP

    反编译APP 有两种反编译工具:dex2jar 和 apktool,两个工具反编译的效果是不一样的,dex2jar反编译出java源代码,apktool反编译出来的是java汇编代码. dex2jar ...

  3. Andorid 反编译App

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...

  4. 反编译app方法

    如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk. 我们以工具包里的ContactManager.ap ...

  5. 使用node.js安装asar和反编译app.asar

    背景:app.asar文件是Electron加密打包时的中间产物,electron.exe调用resources文件夹下的app.asar从而实现不用解压缩而直接读取文件内容的高效. 一.需要先安装n ...

  6. [.NET产品源码保护].NET防止反编译(非混淆加密)

    .NET产品源码保护产生的背景: .NET源码加密方案支持C#及VB.NET等语言开发的ASP.NET及WINFORM应用.利用.NET支持托管代码与非托管代码共存的特性,将C#代码经过处理放于非托管 ...

  7. 教你如何反编译Android安装文件apk来偷窥源代码

    本文章首发于浩瀚先森博客,地址:http://www.guohao1206.com/2016/08/23/970.html 1. 准备 - java环境 安装java并配置环境 => JAVA环 ...

  8. 逆向番茄社区app的rsa加密方式

    Parse RSA public and private key pair from string in Java 逆向某APP,发现其大部分配置文件都是加密的 .所以逆向算法并解密 RSA和AES密 ...

  9. class-dump 反编译私有的库和应用

    一.下载并安装class-dump 下载class-dump-3.5.dmg  点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...

随机推荐

  1. 使用flask开发网站后端

    Flask 是一个用于 Python 的微型网络开发框架,可以用于快速的搭建一个小型的网站. 我的搜索引擎:http://www.abelkhan.com 就是基于flask开发 一个flask的He ...

  2. Object-C知识点 (二) 控件的实用属性

    开发过程中的组件不常用但是很实用的属性!!!!!! p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Menlo; color: #78492a ...

  3. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  4. URLConnection调用接口

    写在前面: 项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口.对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json ar ...

  5. Spring中实现定时调度

    1,   内容简介 所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作: ...

  6. VB6之写注册表

    难免会遇到写注册表的情况,写了个实用点的RegWrite函数.为了减少代码量,用WScript.Shell取代了API来实现. 使用方式就在注释中了,就不再过多解释了.PS:注释比实现代码要丰富多了, ...

  7. python编程快速上手之第10章实践项目参考答案

      本章主要讲了python程序的调试,当程序有BUG或异常的时候,我们如何调试代码找出问题点.其实在本章之前的章节我们做练习的时候都会遇到各种各样的错语和异常,最初当不知道程序哪里出错的情况下不可否 ...

  8. PKM你的知识需要管理

    有一段时间没有更新技术博客了~,大脑中总感觉有点东西要写,却不知道从哪里开始写~至少写点东西,也算是一个阶段的成长 学习(充电过程).工作(知识变现过程)不是简单重复,永远都是最值得去反思.玩味的事儿 ...

  9. 《Java编程思想》第一二章

    前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...

  10. java操作DBF的使用

    1.引入javadbf.4.1.jar 2. import com.linuxense.javadbf.DBFField;   import com.linuxense.javadbf.DBFRead ...