项⽬⼯程逆向分解随笔

项⽬⼯程逆向分解的关键:拿到基本
的.h.m.mm.c.cpp.swift单元⽂件(供分析查看)。单元⽂件
编译形成.app应⽤包
整个集成类的整体对外呈现出的⻛格特征(载体⽀撑层(内嵌⼦层(是否公开不确定)))
视图层/数据层/辅助层。
原⽣登录体系进⼊原⽣世界活动/h5登录体系进⼊ h5世界活动
AppStoreConnect(ASC平台)平台操作耐⼼等待
iphone6s不⽀持⽂件包处理(没有⽂件包应⽤可下载)
iPhone7p⽀持⽂件包处理(存在⽂件包应⽤可下载)
层级数据值
typedef UILayoutPriority MASLayoutPriority;
默认为1000
static const MASLayoutPriority MASLayoutPriorityRequired =
UILayoutPriorityRequired;
⾼ 750
static const MASLayoutPriority MASLayoutPriorityDefaultHigh =
UILayoutPriorityDefaultHigh;
中间 500
static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500;
低250
static const MASLayoutPriority MASLayoutPriorityDefaultLow =
UILayoutPriorityDefaultLow;
static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel =
UILayoutPriorityFittingSizeLevel;
对应系统的
static const UILayoutPriority UILayoutPriorityRequired
NS_AVAILABLE_IOS(6_0) = 1000;
static const UILayoutPriority UILayoutPriorityDefaultHigh
NS_AVAILABLE_IOS(6_0) = 750;
static const UILayoutPriority UILayoutPriorityDefaultLow
NS_AVAILABLE_IOS(6_0) = 250;
static const UILayoutPriority UILayoutPriorityFittingSizeLevel
UILayoutPriorityRequired > UILayoutPriorityDefaultHigh >
UILayoutPriorityDefaultLow > UILayoutPriorityFittingSizeLevelweb前端元素组件:
事件绑定的过程其实为赋(函数)值的过程,函数本身执⾏区写⼊的过程(仅写⼊⾮调
⽤)
绑定仅写⼊⾮调⽤ (调⽤不属于绑定,调⽤属于另外⼀个触动执⾏过程)
所谓事件本质指动作函数集/每个事件本质上⼀个动作函数集(指定标识识别符)
前端元素组件
软件内容包的兼容性越⾼某种程度意味着内嵌的编码越多,包的容量越⼤。
功能模块⼊⼝:元组件功能模块⼊⼝
服务提供⽅和服务接收⽅,服务双⽅签订的整个服务流程(流程对应的渲染交互变化
流程)。视觉暂留效果形成整体化复杂现象。
内存区域: Location+Length
⼤器⽫内置分割⼩器⽫
客户端的组件触发后调⽤ web端的事件
web端的组件触发后调⽤客户端的事件
组件触发后可对任意端事件进⾏调⽤
起点数据模型的拿取+中途逻辑的转移+终点视图器⽫的写⼊
电脑端配置开发平台交互环境:搭建Flutter源码开发环境
不依赖于平台的原⽣组件/渲染的完整过程:元组件器⽫ +数据点阵内容
isolate分层隔离
侧边栏过滤单元⽂件本身名称
搜索导航栏单元⽂件内部的内容搜索
popToRootViewControllerAnimated设置位置释放时机
popViewControllerAnimated动画⾮动画效果(推荐动画效果yes)
didMoveToParentViewController
导航栏⾼度
64 = 20+44
88 = 44(24+20)+44
xcusrdata 脏数据⽂件不上提交
打包⽅式:直接usb(直接run/编译ipa安装devicesXcode/itools)+云端分发库间接
某个组件元素
由A⾄ B路径轨迹渠道/轨迹路由的设计⽅案
拆分业务模块/根据业务场景模块拆分/场景元素模块组件/依据业务场景搭建元素模
块(组件元素)/业务场景组件化元素模块
AssociatedDomains applinks:mbank2.srcb.com
直观化—> ⾮直观化:加固过程
随着需求的增加及频繁变更,项⽬会越来越⼤,耦合会越来越多,开发效率也会降
低需要做模块拆分(官⽅组件化/模块拆分)。
组件化的模块组件不涉及具体的业务场景为功能型模块组件。常规下我们谈及模块
指代业务横切菜单模块(涉及众多的业务场景)。
应⽤程序App基本框架整体模型:
Input/Output公开API接⼝
业务(层⾯)组件化更加倾向于表⾯层(业务(层⾯)的层⾯优先级更⾼)
组件化的层⾯优先级 > 基础框架的层⾯优先级
(底层)基础框架:不涉及具体的含义意义没有具体的指向/抽象的数据概念/不涉及
具体场景⽅向/单纯的数据进出⼝ (形参⼊⼝ /事件返回出⼝)
业务(层⾯)组件:场景业务线(某个场景功能的业务线逻辑分⽀对应着整个组件功能
元素)所在的整个完整的业务线。 (组件元素的⼊⼝)
1.模型介绍
(1)完整的App应⽤从作⽤⻆度来说由基础框架 (AppFramework)和业务组件
(Business)组成。
(2)Business指具体业务线的场景业务。 AppFramework是基础框架(壳⼯程)(只单
纯进⾏数据的处理,基础框架本身不存在具体指向的业务逻辑),基于基础框架进⾏
场景业务线的组件开发。基础框架AppFramework包含基础功能组件 、 基础业务组
件和Framework。
基础功能组件指⽹络层、数据库读写、⽇志等基础服务;
基础业务组件指上层业务需要⽤到的⽐较独⽴的更加基础的业务服务组件,如登录
组件、⽀付组件、评论组件等; Framework负责基础功能组件和基础业务组件的调
度和⽣命周期管理,因为前⾯说组件都是功能模块彼此之间⽆连接的,因此⽆法独
⽴运⾏起来。
(3)遵循向下依赖关系。即Business业务层整体依赖于AppFramework基础框架
层。 AppFramework中Framework事件类似于⼀个增量调度器,是基于基础功能组
件和基础业务组件的构建。基础业务组件依赖于基础功能组件。这种向下依赖关系
可以显式依赖,即可以直接调⽤。
(4)关于平级依赖关系。通常情况下AppFramework基础框架尽量采⽤向下依赖
关系。对于上层业务组件之间采⽤平级依赖很常⻅。涉及到组件间数据的通信转移
(间接转移),属于基础框架中的Framework的职责,提供⼀个Router或Mediator
进⾏中转实现间接转移。1.
2.
渠道路由中转辅助
单⼀⼯程开发模式显露出⼀些弊端:
耦合⽐较严重(因为没有明确的约束,「组件」间引⽤的现象会⽐较多)
容易出现冲突(尤其是使⽤ Xib及XcodeProject)
业务⽅的开发效率不够⾼(只关⼼⾃⼰的组件,却要编译整个项⽬)
采取了「组件化」策略(多⼯程多⽬标应⽤):
加快编译速度(不⽤编译主⼯程的⼤堆代码了)
⾃由选择开发姿势(MVC / MVVM / FRP)
⽅便 QA 有针对性地测试
提⾼业务开发效率
CTMediator 基于CT中转SDK
Target-Action ⽬标应⽤ (程序) 事件
⼯程多分⽀
⼯程内嵌
https://github.com.ipaddress.com
全球IP地址 查询⽹站
Multiple commands produce ‘/Users/haijunyan/Library/Developer/Xcode/
DerivedData/SRCBEBank-cneruzjdomuxdcfgocbopzsnuhva/Build/Products/
Debug-iphoneos/SRCBEBank.app/web_pay_delete.png’:

  1. Target ‘SRCBEBank’ (project ‘SRCBEBank’) has copy command from ‘/Users/
    haijunyan/Desktop/企业变更上线/SRCBEBank_4.2.8/SRCBEBank/Module/Fido/
    Images/web_pay_delete.png’ to ‘/Users/haijunyan/Library/Developer/Xcode/
    DerivedData/SRCBEBank-cneruzjdomuxdcfgocbopzsnuhva/Build/Products/
    Debug-iphoneos/SRCBEBank.app/web_pay_delete.png’
  2. Target ‘SRCBEBank’ (project ‘SRCBEBank’) has copy command from ’
    web_pay_delete.png’ to ‘/web_pay_delete.png’
    资源重复引⼊
    10.20.202.26:9090
    编译后由解释器产⽣的链接内容单元⽂件属于⾮应⽤层指令
    ⽂件,故应⽤层开发者根据业务功能业务需求⽽需要开发构
    建的⾼级语⾔指令⽂件并⾮链接内容⽂件,应⽤层开发者不
    需要关注不需要在意编译后的链接⽂件。
    h5语⾔构建元素组件+内容资源(引⼊ webview⽹图内嵌的浏览器器⽫中存放渲染)1.
    元素组件的构建语⾔? h5语⾔ /Java语⾔ /OC语⾔ /Swift语⾔ /Spring语⾔ /C语⾔ /
    C++(CPP)语⾔。任何语⾔都可以达到绘制效果,区别在于效率⾼低。
    服务的最⾼境界:让普通⽤户进⼊⽩痴状态。
    OCR(OpticalCharacterRecognition)光学字符识别/⽂字识别
    代理/block/h5交互:指定对象的过程其实就是赋值(赋指令值/给⽅法名)
    h5⾃⼰做不需要客户端。开发过程:准备好数据资源+逻辑渲染层交互(提示/暗
    示)。
    元素组件是否直接绑定VC?!
    商家端App+银⾏⽀付机构+消费者端App
    商户解码仪器/商户解码设备
    数据信息的准备+正式动作确定+动作后的结果
    占位提示符
    IBOutlet界⾯构建器体系辅助输出⼝映射名
    IBAction 界⾯构建器体系绑定事件
    真正⽣效/真实⽣效
    次级键字段名
    于画布上⾯直接绘制出的元件即直接存放在画布上⾯的直接元件为loadNibNamed
    事件函数的返回值数组中组件体元素。
    约束式动态/frame式静态
    渲染区默认限制(失效)
    参考元件
    待布局元件
    参考元件稳定+约束线 == 》待布局元件客观稳定
  1. 待布局元件动态虚稳定
    尺⼨部分:⾮⽮量(⾮负)
    位置部分: ⽮量
    抗拉伸优先级画布上⾯的直接集成容器体可由对应的集成视图辅助类(⽗类)字段名持有
    拖线的对应IBOutlet字段名定义在File’sOwner⽂件类声明区
    id 实例值/类别名
    指定Xib Test View Two元件归属类(按钮事件绑定有效/layoutSubviews才会触发)
    事件名API的写⼊ (赋值)/读取(调⽤)
    优先级: Xib Test View Two > 优先级: File’sOwner
    逻辑⻆度向单组⽂件拖线
    表图/表图装饰渲染图
    ⾯积重叠区域
    捕获性优先值⾼低
    ⼿势信息进⼊渲染图层
    图⽚ base64码完整格式
    “data:image/
    png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAI
    AAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAB9SR//fUkf/31JH/99SR//fUkf/
    31JH/99SR//fUkf/31JH/99SR//fUkf/6mHbP+LXDf/fUkf/31JH/99SR//fUkf/31JH/
    99SR//fUkf/31JH/99SR//i104/5lwT/+RZkP/fksh/6eFaP/8/Pv/mG9N/31JH/99SR//
    fUkf/31JH/99SR//fUkf/31JH/+tjHL/6uHb//7+/vXx7v/8+/r//6N/Yv99SR//
    fUkf/31JH/99SR//fUkf/35LIf/PvK3///+vj3b/fUkf/31JH/
    99SR//fUkf/31JH/++pI/08Oz/vqSQ/8y3p///u6CK/31JH/
    99SR//fUkf/31JH/+IWDL/+vn3///s5d//iVo1/6B7XP/6+ff/8Orl/9TDtv+5nYb/
    nXZX/4NRKf9+SyL/fUkf/31JH/99SR//sJF3onxe/35LIv+ge1z/ils1/31JH/
    99SR//fUkf/6qIbf/dz8T/1MK0/31JH/99SR//fUkf/8WunP///Pv7/39MIv99SR//
    fUkf/31JH/99SR//fUkf/31JH//ay7///+ri2/99SR//fUkf/31JH//Frpv///38+/9/TCP/
    fUkf/31JH/99SR//fUkf/31JH/99SR//2szA///q4dv/fUkf/31JH/99SR//r491
    pIBi/31JH/99SR//fUkf/31JH/99SR//hVUt//j29P//1MK1/31JH/99SR//fUkf/4dXMP/
    59/b//+7o4/+MXjn/fUkf/31JH/99SR//gE0k/9XFuP///6aDZ/99SR//fUkf/
    31JH/99SR//up+I9vPw/8OrmP+si3D/uZ2G/+ri297Rx/99SiD/fUkf/
    31JH/99SR//fUkf/31KIP/KtqX//v7+/+Xb0/+HWDH/fUkf/31JH/
    99SR//fUkf/31JH/99SR//fUkf/6eFaP/l2tL//v7+8evn/7yhi/+BTyb/fUkf/
    31JH/99SR//fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/4dXMP+Uakf/jV86/31JH/
    99SR//fUkf/31JH/99SR//fUkf/31JH/9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/
    f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==”;
    base64单纯内容部分
    “AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQ
    AQAAAAAAAAAAAAAAAAAAAAAAAB9SR//fUkf/31JH/99SR//fUkf/31JH/99SR//
    fUkf/31JH/99SR//fUkf/6mHbP+LXDf/fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/
    31JH/99SR//i104/5lwT/+RZkP/fksh/6eFaP/8/Pv/mG9N/31JH/99SR//fUkf/31JH/
    99SR//fUkf/31JH/+tjHL/6uHb//7+/vXx7v/8+/r//6N/Yv99SR//fUkf/31JH/
    99SR//fUkf/35LIf/PvK3///+vj3b/fUkf/31JH/99SR//fUkf/
    31JH/++pI/08Oz/vqSQ/8y3p///u6CK/31JH/99SR//fUkf/
    31JH/+IWDL/+vn3///s5d//iVo1/6B7XP/6+ff/8Orl/9TDtv+5nYb/nXZX/
    4NRKf9+SyL/fUkf/31JH/99SR//sJF3onxe/35LIv+ge1z/ils1/31JH/99SR//
    fUkf/6qIbf/dz8T/1MK0/31JH/99SR//fUkf/8WunP///Pv7/39MIv99SR//fUkf/31JH/
    99SR//fUkf/31JH//ay7///+ri2/99SR//fUkf/31JH//Frpv///38+/9/TCP/fUkf/31JH/
    99SR//fUkf/31JH/99SR//2szA///q4dv/fUkf/31JH/99SR//r491pIBi/31JH/
    99SR//fUkf/31JH/99SR//hVUt//j29P//1MK1/31JH/99SR//fUkf/4dXMP/59/b//
    +7o4/+MXjn/fUkf/31JH/99SR//gE0k/9XFuP///6aDZ/99SR//fUkf/31JH/99SR//
    up+I9vPw/8OrmP+si3D/uZ2G/+ri297Rx/99SiD/fUkf/31JH/99SR//
    fUkf/31KIP/KtqX//v7+/+Xb0/+HWDH/fUkf/31JH/99SR//fUkf/
    31JH/99SR//fUkf/6eFaP/l2tL//v7+8evn/7yhi/+BTyb/fUkf/31JH/99SR//
    fUkf/31JH/99SR//fUkf/31JH/99SR//fUkf/4dXMP+Uakf/jV86/31JH/99SR//fUkf/
    31JH/99SR//fUkf/31JH/9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/
    SyH/f0sh/39LIf9/SyH/f0sh/39LIf9/SyH/
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==”;
    以地址作为元素的器⽫ (内存)⽀持内嵌迭代递归/数据链表中每个单元(格)坑位对应
    着基础单元对象/数据链表中的基础单元对象内部若存在字段名映射着下⼀个同⻛格
    基础单元对象(单向表)/数据链表中的基础单元对象内部若存在2个不同的字段名分
    别映射着上/下⼀个同⻛格基础单元对象(双向表)
    某⽚内存消耗所对应的内存⽚段:(⼆元数据序列组合(内存⽚段⼊⼝地址,内存⽚
    段范围⻓度XL))
    内存消耗系数X
    对象⻓度L内存⽚段范围⻓度地址差(值)===内存⽚段结束地
    址减去内存⽚段⼊⼝地址
    内存消耗系数:指某单元对象单个所需消耗的内存的⻓度值。
    临界地址值(有效作⽤区为刻度前⾯的区域)
    环境本身需要占据的内存区类对象环境部分(次级变量名本身⾃耗/符号别名本身坑
    位)/⽤户所需内容的消耗(它耗)
    真正待释放对象所存储的有效内存⽚段
    next指向下⼀个空管理坑位内存(临界地址)
    POOL_SENTINEL:哨兵对象变量别名本身⾃耗(坑位栈内存)/SENTINEL哨兵就像⻔卫引导每⼀个待释放的实例堆对象值进⼊ AutoreleasePoolPage的管理有效栈内
    存⽚段
    压栈:把堆对象(实例值)压⼊栈内存中的过程
    内存存在的分析⽅式:栈-内嵌->堆-内嵌->栈-内嵌->堆-内嵌->栈-内嵌->堆-内嵌-

栈-内嵌->堆-内嵌->栈。。。。。。 (正向1栈-内嵌->1堆)(逆向1堆-内嵌->n栈)
实例对象值本身强调堆对象/变量名本身强调栈内存
CPU缓存>内存>磁盘>远程获取
CPU缓存+主内存 组合体系
本质上为实现信息存储的⼯具(信息读写⼯具)
存储栈/存储缓存器⽫
冷⻚就是冷的⻚:该AutoreleasePoolPage实例的数据信号块不⼤可能已存在于
CPU相关的缓存区⽚段内
热⻚就是热点⻚:该AutoreleasePoolPage实例的数据信号块很⼤⼏率可能已存在
于CPU相关的缓存区⽚段内
共享主机设备
vnc://172.29.216.36

你可能感兴趣的:(工程逆向,web)