Skip to main content

SVN冲突解决方法

在ubuntu中,使用svn控制代码版本(其实个人喜欢GIT的,但是team使用的svn),出现冲突问题,做程序员就得上刀山下火海,不怕问题来找你,所以,本着职业的精神,好吧,解决吧。

第一次使用markdown写博客,写的时间有点久,语法不熟悉,看着语法手册一步一步创建的,大家凑合着看吧。

继续阅读

东方头条领取金币分析

东方头条APP推出看新闻换金币的奖励措施,1000金币=1RMB,带着这个创造财富的动力,想分析一下IOS版的东方头条APP。但是,我还没开始着手分析,就发现IOS版并没有阅读文章送金币的活动,阿西吧,那就温故而知新嘛。

如果你也想薅羊毛,那我就当仁不让的推荐给你,邀请码:089238394。就这样吧,我们开始任性的逆向之旅吧,走到哪算哪儿,别认真你是否能能获得额外的金币。

继续阅读

通过逆向深入理解 Block 的内存模型

自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自己对未知的好奇心,还经常能发现一些意外的惊喜。

正常情况下,通过分析界面以及 class-dump 出来头文件就能对某个功能的实现猜个八九不离十。但是 Block 这种特殊的类型在头文件中是看不出它的声明的,一些有 Block 回调的方法名 dump 出来是类似这样的:

- (void)FM_GetSubscribeList:(long long)arg1 pageSize:(long long)arg2 callBack:(CDUnknownBlockType)arg3;

因为这种回调看不到它的方法签名,我们无法知道这个 Block 到底有几个参数,也不知道它函数体的具体地址,因此在使用 lldb 进行动态调试的时候也是困难重重。我也一度被这个困难所阻挡,以为调用到有 Block 的方法就是进了死胡同,没办法继续跟踪下去了。我还因此放弃过好几次对某个功能的分析,特别受挫。

好在,我们还有 Google 这个强大的武器。没有什么问题是一次 Google 不能解决的。如果有,那就两次。

继续阅读