澳门新葡新京 > 关于我们 > 葡京赌场:数据加密的,iOS逆向使用dumpdecrypted给app砸壳

葡京赌场:数据加密的,iOS逆向使用dumpdecrypted给app砸壳
2020-05-05 19:38

葡京赌场:数据加密的,iOS逆向使用dumpdecrypted给app砸壳。最近在学习iOS逆向,在砸壳这个环节查看了很多资料写的各有不同最终还是成功了,但是过程相对曲折,这里记录分享一下自己砸壳的过程希望往后面可以更好的帮助大家。

dumpdecrypted 是个出色的app脱壳开源工具,它的原理是:将应用程序运行起来(iOS系统会先解密程序再启动),然后将内存中的解密结果dump写入文件中,得到一个新的可执行程序。

干这件事情,我真是蛋痛。

  • 是网络上使用最广泛的编码系统,能够将任何二进制数据,转换成只有 65 个字符组成的文本文件

  • az,AZ,0~9,+,/,=

  • Base 64 编码后的结果能够反算,不够安全

  • Base 64 是所有现代加密算法的基础算法

  • base64只能算伪加密,因为base64的码表是公开的.

  • 如果自己创建私有码表就可以实现加密的效果.

  • base64编码 "加密"

这里我要说一下砸壳只能在越狱手机上进行如果没有越狱设备的话是不行的。

1.下载与安装:

从微博评论中整理了一些互联网产品领域常用的英语,有些是我常用的,有些是我身边其他人常用的,但不包括缩写。

  1. 下载dumpdecrypteddumpdecrypted源码下载地址下载之后放在哪里看你个人喜好。
  • 下载地址:

Aapp:应用,通常特指手机应用

//加密到base64- (NSString *)encodeBase64String:(NSString *)UTF8String{ //将普通字符串转换成Data NSData *data = [UTF8String dataUsingEncoding:NSUTF8StringEncoding]; //将普通Data编码成base64string return [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];}

2.设置Makefile中的SDK字段和设备上的一致

Bbanner:图片广告,在移动应用中通常特指头图buffer:缓存区bug:程序故障button:按钮

  • 从base64编码解码

在有些教程里是没有说设置SDK保持一致的。不设置能不能成功我也没有尝试过,不过设置了是一定可以的。

https://github.com/stefanesser/dumpdecrypted/archive/master.zip

Ccache:缓存crash:通常指应用崩溃,闪退code:代码cover:覆盖,经常用于覆盖某一项成本

打开下载的dumpdecrypted文件夹里面的Makefile(我用的是sublime)

  • 编译安装:在终端中进入到刚刚下载解压的目录。可以发现如下文件:

Ddeadline:截止日期,十分恐怖delay:延期demo:通常指可演示的产品模型

//将base64转换成普通字符串- (NSString *)decodeBase64String:(NSString *)base64String{ NSData *data = [[NSData alloc]initWithBase64EncodedString:base64String options:0]; return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];}

新浦京娱乐 1Makefile部分内容

Ffeature:通常指新版本的新功能

  • 加密解密都使用相同的密钥
  • 速度快,适合大数据加密
  • AES
    • AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。
  • DES,3DES.Keychain中保存密码就是用过3DES加密
    • 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

我们看第三行是SDK,复制sdk后面的内容

Shuangquan:RevertProject Wade$ cd dumpdecrypted-masterShuangquan:dumpdecrypted-master Wade$ lsMakefile README dumpdecrypted.c Shuangquan:dumpdecrypted-master Wade$ 

Iidea:想法,创意icon:图标

新浦京娱乐 2DES算法步骤

xcrun --sdk iphoneos --show-sdk-path

直接make, 就可以生成dumpdecrypted.dylib文件了

Lloading:通常指数据加载状态log:日志logo:通常特指APP主图标

钥匙串Keychain

网络数据就不用说了,任何节点都可能截取请求.所以网络数据一定要加密不过即使存储在本地沙盒的敏感信息也一定要加密,防止手机越狱后可以访问到程序的沙盒从而泄密.

  • SSKeychain 提供把密码添加到iOS系统的钥匙串的接口 推荐直接使用
  • 内部是3DES加密 就是进行三轮DES加密.
  • SSKeychain框架的使用
/** 设置密码到Keychain钥匙串 @param password 字符串形式的密码 @param serviceName 服务名称,其实是Bundle identifier @param account 密码对应的帐号 @return 是否写入成功 */+ setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;/** 获取保存的密码 @return 返回对应的密码 */+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;/** 删除对应的密码 @return 是否删除成功 */+ deletePasswordForService:(NSString *)serviceName account:(NSString *)account;

新浦京娱乐 3还需要在Xcode中配置一下,打开开关就行

  • 算法公开,可逆的加密算法
    • 用公钥加密,私钥解密
    • 用私钥加密,用公钥解密
    • 速度慢,适合小数据加密

打开终端并输入上面命令

- 常见问题①错误

Nnative:通常指原生APP,反面是WebAPP

RSA

  • 普遍的加密
    • 密钥的安全要求很高的话,可以先用RSA加密AES的密钥

新浦京娱乐 4RSA原理

新浦京娱乐 5本地默认SDK路径

xcrun --sdk iphoneos --find gcc -Os -Wimplicit -isysroot xcrun --sdk iphoneos --show-sdk-path -Fxcrun --sdk iphoneos --show-sdk-path/System/Library/Frameworks -Fxcrun --sdk iphoneos --show-sdk-path/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c/bin/sh: /Applications/Xcode: No such file or directorymake: *** [dumpdecrypted.o] Error 127

Ppush:通常指消息推送

HTTPS基本原理

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

可以看到我的默认的是9.3的我的xcode版本是7.3的xcode。我的设备是iOS8.3而现在默认的为9.3是不一样的所以我们找到对应版本的路径自己设置一下,如果没有的话就去这里下载旧版本的xcode旧版xcode下载地址下载安装好旧版本xcode之后在xcode目录下

说明是Xcode 路径有问题需要执行 xcode-select 设置Xcode的路径

Rreview:通常指代码复查

说人话就是找SSL服务器,通过几次握手,验证彼此的证书,确定传输的密钥.然后根据记录协议进行安全的传输. 证书由第三方发布,第三方进行验证.
  • 服务器找CA申请证书
    • 证书中有公钥,私钥,认证信息
  • 客户端链接服务器,告诉服务器自己支持的加密算法,摘要算法,和SSL版本号. 同时发送一个随机数用于产生密钥.
  • 服务器选择要使用的加密算法,并将自己的证书中的认证信息,公钥回传给客户端.
  • 客户端通过CA服务器验证证书.如果服务器要求验证客户端证书,就把自己的证书发给服务器.
  • 服务器根据前面提供的随机数计算出用于数据加密的共享密钥
  • 客户端将所有握手消息的 MAC 值发送给服务器端,服务器端也将所有握手消息的 MAC 值发送给客户端。这么做是为了防止攻击者在握手过程中篡改了消息内容。

客户端和服务器端使用握手过程中产生的加密密钥交换握手结束消息。握手结束,SSL 连接建立。在 SSL 连接建立后,将开始遵循记录协议对数据进行传输。

不可逆加密:MD5,SHA1,SHA256,SHA512

/Applications/Xcode6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs在这个目录下找到我们需要的sdk替换默认的

Shuangquan:Desktop Wade$ sudo xcode-select -p/Applications/Xcode.app/Contents/DeveloperShuangquan:Desktop Wade$ sudo xcode-select -pPassword:***/Applications/Xcode.app/Contents/DeveloperShuangquan:Desktop Wade$ sudo xcode-select -rPassword:***澳门葡京真人开户,Shuangquan:Desktop Wade$ sudo xcode-select -p/Applications/Xcode.app/Contents/Developer

Sslogan:通常指产品的形象口号

MD5Hash算法的特点:

1:输入任意长度的信息,经过摘要处理,输出为128位的信息.。2:不同输入产生不同的结果,3:根据128位的输出结果不可能反推出输入的信息

  • MD5 摘要算法
    • 在加密的时候就已经丢失了原来的信息,所以没办法还原回去.
    • MD5以后只有128位二进制数据,表现为长度32的16进制字符串.
  • MD5对密码加密,工具类.
  • 葡京赌场,MD5在线破解
    • 暴力破解,字典破解.将明文密文存为字典,查询.
  • 防止破解:就算将密码以MD5形式存储,也可能出现暴力破解,撞库等泄密,所以要提高存储安全性
    • 加盐:原密码加一个复杂的字符串,防止用户输入的密码过于简单.但不太安全,计算机性能越来越强大,迟早被破解.

新浦京娱乐 6SDK修改之后

② 一般SDK是向下兼容的,如果保证SDK版本与越狱设备的版本一致或者高于越狱设备版本,使用xcrun --sdk iphoneos --show-sdk-path查看SDK版本。如下:SDK版本是8.3,设备是iOS 8.1

Ttab:标签页tag:标签timeline:通常指信息流tips:通常指新手提示title:页面标题或者模块标题toast:通常指快速消失的半透明提示浮层

HMAC(朋友们,重澳门新莆京登陆,!!点!新浦京娱乐,! 敲黑板)

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。既然是摘要,你应该就懂了.和MD5一样.不过它的安全系数更高,就算碰撞出来也不可能知道你原来的消息是什么.

原密码加KEY进行HMAC计算,结果再加上Time后再加KEY进行HMAC计算. 使破解有一个时效性

  • HMAC+时间,每分钟生成的值不一样.具体步骤
    • KEY(第一次链接随机生成的字符串)用MD5计算得到md5Key
    • 数据和之前md5Key的进行HMAC计算
    • 从服务器获取当前时间到分钟的字符串
    • HMAC值+时间 和KEY的MD5值进行HMAC计算传递给服务器.
      • 考虑到网络延迟,服务器一般会对接收到最终HMAC的时间和前一分钟做两次计算,符合其中一次即可.
    • 额外好处:防止监守自盗.公司内部存储数据也不要使用明文数据,而是加密后的结果.避免出现CSDN的泄密事件
//将传入的密码以HMAC形式加密- hamcString:(NSString *)password complete:(NSString * secureStr))block{ //这是第一次链接时确定的KEY NSString *KEY = @"keykey"; //将KEY做MD5处理 使用自定义分类 NSString *md5Key = [KEY md5String]; //将明文和md5Key进行HMAC计算 NSString *hmacStr = [password hmacMD5StringWithKey:md5Key]; //获取服务器时间信息. //创建服务器URL NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/php/hmackey.php"]; //开启异步任务,访问服务器获取时间 [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { //根据服务器返回的数据类型,反序列化.这里返回的JSON NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSString *time = dic[@"key"]; //获取到时间后,进行拼接然后再进行HMAC. 得到最后加密完成的字符串进行传输 NSString * secureStr =[[hmacStr stringByAppendingString:time] hmacMD5StringWithKey:md5Key]; //因为是网络异步耗时任务,所以通过block回调来返回给主线程. 这里先进入主线程 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ if  { //回调block block中只需要将生成的字符串交给服务器作为密码进行验证就行了. //顺便说一下,登录等敏感信息通常采用POST方式访问 block(secureStr); } }]; }] resume];}

3.修改Makefile中的GCC_UNIVERSAL字段和dumpdecrypted.c

Shuangquan:Desktop Wade$ xcrun --sdk iphoneos --show-sdk-path/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk

最后想了一下,以上全部不用英文,只用中文的互联网从业者,可能不存在吧。