为了了解支付宝app的源码结构,我们可以使用class-dump-z工具来分析支付宝二进制。

1.下载配置class_dump_z


前往 https://code.google.com/p/networkpx/wiki/class_dump_z ,下载tar包,然后解压配置到本地环境

  1. $ tar -zxvf class-dump-z_0.2a.tar.gz
  2. $ sudo cp mac_x86/class-dump-z /usr/bin/

2.class_dump支付宝app

  1. $ class-dump-z Portal > Portal-dump.txt
  2. @protocol XXEncryptedProtocol_10764b0
  3. -(?)XXEncryptedMethod_d109df;
  4. -(?)XXEncryptedMethod_d109d3;
  5. -(?)XXEncryptedMethod_d109c7;
  6. -(?)XXEncryptedMethod_d109bf;
  7. -(?)XXEncryptedMethod_d109b8;
  8. -(?)XXEncryptedMethod_d109a4;
  9. -(?)XXEncryptedMethod_d10990;
  10. -(?)XXEncryptedMethod_d1097f;
  11. -(?)XXEncryptedMethod_d10970;
  12. -(?)XXEncryptedMethod_d10968;
  13. -(?)XXEncryptedMethod_d10941;
  14. -(?)XXEncryptedMethod_d10925;
  15. -(?)XXEncryptedMethod_d10914;
  16. -(?)XXEncryptedMethod_d1090f;
  17. -(?)XXEncryptedMethod_d1090a;
  18. -(?)XXEncryptedMethod_d10904;
  19. -(?)XXEncryptedMethod_d108f9;
  20. -(?)XXEncryptedMethod_d108f4;
  21. -(?)XXEncryptedMethod_d108eb;
  22. @optional
  23. -(?)XXEncryptedMethod_d109eb;
  24. @end

查看得到的信息是加过密的,这个加密操作是苹果在部署到app store时做的,所以我们还需要做一步解密操作。

3.使用Clutch解密支付宝app

1)下载Clutch
iOS7越狱后的Cydia源里已经下载不到Clutch了,但是我们可以从网上下载好推进iPhone
地址:Clutch传送门

2)查看可解密的应用列表

  1. root# ./Clutch
  2. Clutch-1.3.2
  3. usage: ./Clutch [flags] [application name] [...]
  4. Applications available: 9P_RetinaWallpapers breadtrip Chiizu CodecademyiPhone FisheyeFree food GirlsCamera IMDb InstaDaily InstaTextFree iOne ItsMe3 linecamera Moldiv MPCamera MYXJ NewsBoard Photo Blur Photo Editor PhotoWonder POCO相机 Portal QQPicShow smashbandits Spark tripcamera Tuding_vITC_01 wantu WaterMarkCamera WeiBo Weibo

3)解密支付宝app

  1. root# ./Clutch Portal
  2. Clutch-1.3.2
  3. Cracking Portal...
  4. Creating working directory...
  5. Performing initial analysis...
  6. Performing cracking preflight...
  7. dumping binary: analyzing load commands
  8. dumping binary: obtaining ptrace handle
  9. dumping binary: forking to begin tracing
  10. dumping binary: successfully forked
  11. dumping binary: obtaining mach port
  12. dumping binary: preparing code resign
  13. dumping binary: preparing to dump
  14. dumping binary: ASLR enabled, identifying dump location dynamically
  15. dumping binary: performing dump
  16. dumping binary: patched cryptid
  17. dumping binary: writing new checksum
  18. Censoring iTunesMetadata.plist...
  19. Packaging IPA file...
  20. compression level: 0
  21. /var/root/Documents/Cracked/支付宝钱包-v8.0.0-(Clutch-1.3.2).ipa
  22. elapsed time: 7473ms
  23. Applications Cracked:
  24. Portal
  25. Applications that Failed:
  26. Total Success: 1 Total Failed: 0

4)导出已解密的支付宝app

从上一步骤得知,已解密的ipa位置为:/var/root/Documents/Cracked/支付宝钱包-v8.0.0-(Clutch-1.3.2).ipa
将其拷贝到本地去分析

4.class_dump已解密的支付宝app


解压.ipa后,到 支付宝钱包-v8.0.0-(Clutch-1.3.2)/Payload/Portal.app 目录下,class_dump已解密的二进制文件

  1. $ class-dump-z Portal > ~/Portal-classdump.txt

这回就可以得到对应的信息了:

  1. @protocol ALPNumPwdInputViewDelegate <NSObject>
  2. -(void)onPasswordDidChange:(id)onPassword;
  3. @end
  4. @protocol ALPContactBaseTableViewCellDelegate <NSObject>
  5. -(void)shareClicked:(id)clicked sender:(id)sender;
  6. @end
  7. @interface MMPPayWayViewController : XXUnknownSuperclass <SubChannelSelectDelegate, UITableViewDataSource, UITableViewDelegate, CellDelegate, UIAlertViewDelegate> {
  8. @private
  9. Item* channelSelected;
  10. BOOL _bCheck;
  11. BOOL _bOpenMiniPay;
  12. BOOL _bNeedPwd;
  13. BOOL _bSimplePwd;
  14. BOOL _bAutopayon;
  15. BOOL _bHasSub;
  16. BOOL _bFirstChannel;
  17. BOOL _bChangeSub;
  18. BOOL _bClickBack;
  19. UITableView* _channelListTableView;
  20. NSMutableArray* _channelListArray;
  21. NSMutableArray* _subChanneSelectedlList;
  22. NSMutableArray* _unCheckArray;
  23. UIButton* _saveButton;
  24. UILabel* _tipLabel;
  25. MMPPasswordSwichView* _payWaySwitch;
  26. MMPPopupAlertView* _alertView;
  27. UIView* _setView;
  28. int _originalSelectedRow;
  29. int _currentSelectedRow;
  30. NSString* _statusCode;
  31. ChannelListModel* _defaultChannelList;
  32. }
  33. @property(assign, nonatomic) BOOL bClickBack;
  34. @property(retain, nonatomic) ChannelListModel* defaultChannelList;
  35. @property(retain, nonatomic) NSString* statusCode;
  36. @property(assign, nonatomic) int currentSelectedRow;
  37. @property(assign, nonatomic) int originalSelectedRow;
  38. @property(retain, nonatomic) UIView* setView;
  39. @property(retain, nonatomic) MMPPopupAlertView* alertView;
  40. @property(retain, nonatomic) MMPPasswordSwichView* payWaySwitch;
  41. @property(assign, nonatomic, getter=isSubChannelChanged) BOOL bChangeSub;
  42. @property(assign, nonatomic) BOOL bFirstChannel;
  43. @property(assign, nonatomic) BOOL bHasSub;
  44. @property(assign, nonatomic) BOOL bAutopayon;
  45. @property(assign, nonatomic) BOOL bSimplePwd;
  46. @property(assign, nonatomic) BOOL bNeedPwd;
  47. @property(assign, nonatomic) BOOL bOpenMiniPay;
  48. @property(assign, nonatomic) BOOL bCheck;
  49. @property(retain, nonatomic) UILabel* tipLabel;
  50. @property(retain, nonatomic) UIButton* saveButton;
  51. @property(retain, nonatomic) NSMutableArray* unCheckArray;
  52. @property(retain, nonatomic) NSMutableArray* subChanneSelectedlList;
  53. @property(retain, nonatomic) NSMutableArray* channelListArray;
  54. @property(retain, nonatomic) UITableView* channelListTableView;
  55. -(void).cxx_destruct;
  56. -(void)subChannelDidSelected:(id)subChannel;
  57. -(void)switchCheckButtonClicked:(id)clicked;
  58. -(void)checkboxButtonClicked:(id)clicked;
  59. -(void)onCellClick:(id)click;
  60. -(void)showSubChannels;
  61. -(void)tableView:(id)view didSelectRowAtIndexPath:(id)indexPath;
  62. -(id)tableView:(id)view cellForRowAtIndexPath:(id)indexPath;
  63. -(int)tableView:(id)view numberOfRowsInSection:(int)section;
  64. -(float)tableView:(id)view heightForRowAtIndexPath:(id)indexPath;
  65. -(int)numberOfSectionsInTableView:(id)tableView;
  66. -(void)setTableViewFootView:(id)view;
  67. -(void)setTableViewHeaderView:(id)view;
  68. -(id)tableView:(id)view viewForHeaderInSection:(int)section;
  69. -(id)tableView:(id)view viewForFooterInSection:(int)section;
  70. -(float)tableView:(id)view heightForHeaderInSection:(int)section;
  71. -(float)tableView:(id)view heightForFooterInSection:(int)section;
  72. -(void)alertView:(id)view clickedButtonAtIndex:(int)index;
  73. -(void)clickSave;
  74. -(void)netWorkRequestWithPwd:(id)pwd;
  75. -(void)setPayWaySwitchStates:(id)states;
  76. -(void)changePayWaySwitch:(id)aSwitch;
  77. -(void)scrollToSelectedRow;
  78. -(void)didReceiveMemoryWarning;
  79. -(void)viewDidLoad;
  80. -(void)applicationEnterBackground:(id)background;
  81. -(void)dealloc;
  82. -(void)goBack;
  83. -(BOOL)isChannelsSetChanged;
  84. -(id)subChannelCode:(int)code;
  85. -(id)subChannelDesc:(int)desc;
  86. -(id)initWithDefaultData:(id)defaultData;
  87. -(id)initWithNibName:(id)nibName bundle:(id)bundle;
  88. -(void)commonInit:(id)init;
  89. @end

5.分析支付宝源码片段


1)使用了@private关键字限制成员访问权限
但是实际上,在Objective-C编程中,使用@private连Keypath访问都拦不住的

2)抛出了冗长的成员对象
这非常有利分析程序结构

6.进一步思考


1)如何利用 class-dump 结果,结合 cycript 进行攻击呢?
2)class-dump-z 如此强大,有什么方法可以减少暴露的信息吗?

接下来的博文将针对上面的思考,继续总结~

iOS安全攻防(六):使用class-dump-z分析支付宝app相关推荐

  1. ios--安全攻防--使用class-dump-z分析支付宝app

    使用class-dump-z分析支付宝app 文章出处:http://blog.csdn.net/yiyaaixuexi/article/details/18353423#comments 为了了解支 ...

  2. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄. 所以, ...

  3. [置顶] XMPPFrameWork IOS 开发(六)聊天室

    原始地址:XMPPFrameWork IOS 开发(六)聊天室 聊天室 [cpp]  view plain copy print ? //初始化聊天室 XMPPJID *roomJID = [XMPP ...

  4. iOS安全攻防 防 防 防 防不住 . . . . . .

    iOS安全攻防 防 防 防 防不住 . . . . . . 移动端的攻防问题一直存在,一直有问题. 网上有很多前辈总结的经验,我现在站在巨人的肩膀上写个笔记. 先引入头文件 #import <s ...

  5. iOS安全攻防-李文瀚-专题视频课程

    iOS安全攻防-343人已学习 课程介绍          关于iOS应用开发的安全,这块内容可无限的深入和延展 1.苹果的签名机制 2.代码注入的原理 3.HOOK的原理剖析 4.防护进阶 所有的防 ...

  6. iOS 安全攻防学习规划

    [ 基础篇 ] 1. ARM 汇编语言. 书籍资料:<ARM体系结构与编程>杜春雷 苹果官方的参考资料<ARM® Architecture Reference Manual Extr ...

  7. iOS中ImageIO框架详解与应用分析

    2019独角兽企业重金招聘Python工程师标准>>> iOS中ImageIO框架详解与应用分析 一.引言 ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到 ...

  8. 微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析

    作者:蒸米@阿里移动安全 序言 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的.可惜的是官方版的微信并不支持多开的功能,并且频 ...

  9. 微信双开还是微信定时炸弹?- 关于非越狱iOS上微信分身高危插件ImgNaix的分析...

    蒸米 · 2016/04/28 11:01 [email protected] 0x00 序 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有 ...

最新文章

  1. java异常 The origin server did not find a current representation for the target resource or is not
  2. opencv中的imwrite如何保存_如何把公众号的文章用文档保存到电脑中?
  3. |Tyvj|NOIP2004|堆|贪心|P1066 合并果子
  4. java组合框的事件有哪些_博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理...
  5. mysql考勤系统设计函数_Mysql实战之员工考勤系统数据库建立
  6. 转 - 猴子都能看懂的比特币区块链技术之加密算法
  7. cocos2dx3.2 画图方法小修改之 C++ final学习
  8. Jquery easyui 密码两次输入相等的验证
  9. 进程篇—进程整理(转)
  10. Unity3D(六)光照系统
  11. 【前端模板之路】二、人肉非智举,让代码帮我们写代码才是王道
  12. 【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
  13. 游戏设计类毕业论文文献(推荐10篇)
  14. 计算机开机后无法正常显示桌面图标,电脑开机后不显示桌面图标怎么办
  15. android车载行业前景,车载 Android 系统快来了,但前景可能并不乐观
  16. java实现阿里云图片文字识别
  17. linux终端查找隐藏文件,如何在Linux服务器中查看或隐藏文件?
  18. An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
  19. python国际象棋规则_如何使用Python编写一个国际象棋AI程序
  20. 视频会议系统gk服务器,详解华为视频会议系统中信令之间如何实现跨GK呼叫

热门文章

  1. sklearn超参数选择
  2. 粉色可爱简单404页面代码
  3. Ubuntu中dpkg命令
  4. [golang爬虫实战]到sohu上爬取搞笑gif图片
  5. 解决生成文件中文乱码(阿里代码规范插件导出html乱码)
  6. 计算机在往硬盘上写数据时从磁道开始,计算机在往硬盘上写数据时寻道是从( )磁道开始。...
  7. 中创教育带你了解培训机构投诉退费纠纷增多原因
  8. 前端面试之浏览器内核
  9. 关于性能优化–选择nib还是故事板的讨论
  10. OPhone SDK初体验