iOS逆向工程-dumpdecrypted砸壳

近期想打开大门学习下同行们的iOS开发,于是想到了可以针对一些有特色的应用进行逆向工程,然后着重学习下该应用的设计架构。 由于自己也是初学者,下来就把自己躺过的坑记录在这里方便后续查阅。 逆向工程需要的工具 dumpdecrypted dumpdecrypted是一个砸壳工具。因为appstore安装包apple会为应用加上一层壳,所以在逆向之前我们需要先对应用进行砸壳。官方对dumpdecrypted描述是 Dumps decrypted iPhone Applications to a file 详细信息可以参考dumpdecrypted class-dump 为什么是class-dump It’s a great too...
点我阅读更多...

常用的图形变换

坐标系 坐标系在开发过程中常分为世界坐标系和屏幕坐标系 通常我们的坐标系采用右手型,下图展示了左手坐标系和右手坐标系的区别 左手坐标系,伸出左手用大拇指指向方向轴的方向,其余4个手指自然弯曲,则4指弯曲方向为角度变化的正方向 右手坐标系和左手坐标系对称,只需将左右换成右手即可 iOS采用的是左手坐标系 向量的变换 图像上每个点的位置可以看成一个向量n维向量,取决于图像的空间。所以对图像的变换可以等价于对向量的变换,研究向量的变换可以让我们更直观的了解图像变换的原理 向量的平移(对坐标系内某点得移动) 向量的缩放 X饭方向缩放a倍,Y方向缩放b倍,则有 向量的旋转 二位平面的向量旋转,即可以表示为三维空间的向量绕Z轴的旋转 如图: 将向量x在...
点我阅读更多...

获取iOS设备信息

由于最近要做iPhone6和iPhone6+的适配工作,所以难免会需要对设备型号进行判断,就借此机会总结下判断设备的方法 获取iOS设备信息 1.根据屏幕宽度大小进行判断 #define iPhone6 ([UIScreen instancesRespondToSelector:@selector( currentMode )] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO) #define iPhone6Plus ([UIScreen instancesRespondToSelector:@selector( currentMode ...
点我阅读更多...

iOS测量代码执行时间

iOS准确的测量系统执行时间:在iOS的开发过程中,经常会为了满足严苛的用户体验要求,需要对某些功能和模块的执行时间进行控制,那么问题来了,如何高效的检测代码的执行时间 涉及的API 先来认识几个API,他们被包含在 <mach/mach_time.h> 在使用前我们需要先 #import <mach/mach_time.h> 进入mach_time.h文件,我们可以看到如下内容 struct mach_timebase_info { uint32_t numer; uint32_t denom; }; typedef struct mach_timebase_info *mach_timebase_info_t; typedef s...
点我阅读更多...

CocoaPods问题总结

在项目接入cocoapods后,打包机器打包方面暴漏和很多问题。总会莫名其妙的发生错误,让大家手足无措。 这里我来总结下常见的一些问题的处理方案,方便大家在日后的项目测试中做到有的放矢。 1.找不到相应的库 找不到相应的库的问题,我碰到的有两个原因 1.打包机器没有添加framework对应的源(如何添加源,请继续往下看) 2.本地cocoapods的版本与打包机器上cocoapods的版本不一致,这个问题通常是由于本地的版本高于MTL版本造成的 2.找不到相应的target 由于工程的迁移,或者开发人员的误操作,会造成本地target的丢失。这样在命令行打包过程中,会暴找不到target的错误,这时我们只需要将针对与个人的target设置成shared即可,如下: 重要:这里需...
点我阅读更多...

实现组合的C++代码

这些代码,验证了实现组合的一个算法。较为高效。运作原理就是常说的用二进制标志位标示选取的数字。 代码部分应该已经实现了所需的各个子函数,但是这个只是demo,如需要使用,需要检测是否有完备性问题。 现在将代码贴在这里: #include using std::cout; using std::cin; using std::endl; #include using std::string; string createHelperStr(int maxCount,int subCount); string* combination(string str,int subCount); string sortStrASC(string str); void printCombinatio...
点我阅读更多...

GNUstep编译.m文件并连接形成可执行文件

对于存在多个.m文件的程序,由于需要编译过程中是相互依赖的,并且再编译完成后需要连接方能产生可执行文件。所以我们可以按照如下方法实施: 例如,现在有文件Point.h Point.m main.m 我们可以写如下Makefile文件,然后make,完成编译和连接 建立GNUmakefile,在里边输入如下内容: include $(GNUSTEP_MAKEFILES)/common.make TOOL_NAME=Test Test_OBJC_FILES=source1.m source2.m include $(GNUSTEP_MAKEFILES)/tool.make 可替换其中的黑体为自己的target和source文件名 然后在当前目录执...
点我阅读更多...