本文转载来源:http://blog.csdn.net/yiyaaixuexi/article/details/18353423

为了了解支付宝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)抛出了冗长的成员对象
这非常有利分析程序结构

class-dump逆向分析app相关推荐

  1. Android无需权限显示悬浮窗, 兼谈逆向分析app

    前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...

  2. Android手机跑逆向,Android 逆向工程:基于Xposed Hook实现动态逆向分析

    Xposed是一个非常神奇的框架,对于普通用户,Xposed框架可以发挥Android系统更高的使用效率,可以随便折腾,美化优化系统.但是用于开发者而言,Xposed可以用于 逆向工程,动态逆向分析A ...

  3. 知物由学 | 干货!一文了解安卓APP逆向分析与保护机制

    "知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物 ...

  4. 基于Inspeckage的安卓APP抓包逆向分析——以步道乐跑APP为例

    引言:本人最近稍微弄懂了inspeckage的用法,特在此以步道乐跑APP为例,较详细记录地记录APP抓包与简单的逆向分析过程,用于备忘与共同学习!另外,温馨提醒,本文图片较多,建议连接WiFi阅读! ...

  5. Android逆向小技巧①:从Activity下手找到切入点,逆向分析支付宝APP

    明确目标 关于Android应用的解包.反编译,在网上已经有无数文章了,此处不再赘述.当你已经使用 [d2j-dex2jar] 和 [jd-gui] 得到了APK反编译后的JAVA代码,面对庞大的代码 ...

  6. 逆向分析:还原 App protobuf 协议加密

    前言 之前有记录js逆向.安卓逆向等,今天这里记录下一些协议逆向,这种一般出现在websocket 协议. protobuf 协议等,某音,B站 APP等都有用到这些协议加密,而我们不再是像 js 端 ...

  7. Android逆向分析案例——某点评APP登陆请求数据解密

    今天,七夕,单身23载的程序汪,默默地写着博客~ 上一次的逆向分析案例中讲了如何去分析某酒店的APP登陆请求,为了进一步学习如何逆向分析以及学习其他公司的网络传输加解密,本次案例将继续就登陆请求的数据 ...

  8. 对吃鸡APP的逆向分析

    吃鸡的APP逆向分析涉及到动态调试分析,涉及到对arm汇编指令的掌握,涉及到一些反调试方案的绕过. 下面通过对吃鸡APP的逆向分析做了一次详解解析. 请点击文字进行阅读对android逆向吃鸡APP的 ...

  9. APP逆向分析之XX音乐客户端下载歌曲权限绕过

    很长一段时间没有做逆向分析相关的研究了,最近看了一部电影,电影有首插曲名字叫不见不散,那是相当的好听啊,打开XX音乐,准备下载,额-.弹出付费才能下载-.为了一首歌,开一个包月服务,显然不是我这个搞过 ...

最新文章

  1. bash shell 学习记录
  2. 2019-11-13 惯性环节怎么写成m语言
  3. P1352-没有上司的舞会【树形dp】
  4. [vue] 跟keep-alive有关的生命周期是哪些?描述下这些生命周期
  5. MSSQL 2005数据库安全设置
  6. matlab移动文件到另一个文件夹里,Matlab将文件分类移动到不同文件夹中
  7. web.xml filter 不包含_Elasticsearch 之 Filter 与 Query 有啥不同?
  8. UVA280 LA5588 Vertex【DFS】
  9. 修改DevExpress中英文提示,将英文改为中文
  10. python-excel写入代码1
  11. Atitit.获取某个服务 网络邻居列表 解决方案
  12. 七.项目管理基础知识
  13. tftp服务器上传文件至华三ac,ftp和tftp 上传文件到h3c交换机
  14. web前端基础知识 - CSS语言和功能
  15. win10如何在当前目录打开cmd窗口
  16. Android 高德地图Marker和Marker点击事件处理
  17. 润乾报表设计器——预览报表问题解决
  18. GIF、SVG、PNG、图片格式转换
  19. python基础-元组、集合 、字典
  20. 自制Arduino便携式超声波测距仪

热门文章

  1. java multiset_java代码(5) ---guava之Multiset
  2. Elasticsearch 中为什么会有大量文档插入后变成 deleted?
  3. ​2023年湖北企业人力资源管理师报考条件是什么?启程别告诉你
  4. rabbitmq Confirm三种模式
  5. layui confirm 取消事件
  6. 进程退出以及内存释放
  7. 非常详细的启动光盘制作教程-菜鸟版
  8. 第十四天学Python:类(2):类的继承
  9. linux配置PATH路径
  10. 对于免费下载文献,这个网站足以!