逆向记录:墨墨

 

问题

免费的单词数量有上限,超过需要付费。

嗯!只要能把这个付费功能干掉,从明天起一定好好背单词...

开始

猜想

每次添加新单词,或者更改最大单词数的时候,墨墨会从服务端拉当前用户最大单词数的数据。

之后,存到某个单例里面,然后持久化到本地(证据:断网依然有最大单词限制,添加新单词依然提示购买)

思路

先从VC的方法中找线索,没有的话,尝试找找有木有xxxManager之类的类

开始

收集信息

3524 ??         0:02.20 /var/containers/Bundle/Application/4FC3FD5F-AF17-41C2-8279-C65437176F14/momo_ios.app/momo_ios

加壳App,bundleID: com.maimemo.ios.momo

脱壳:Clutch -d 4

很6,Cluch直接脱壳成功

验证了脱壳成功

dump

class-dump -H momo_ios -o momo_headers 成功

@property(retain, nonatomic) PopoverHelper *popoverHelper;

看了一圈从UI入手似乎比较麻烦...我们从别的层面入手去搞。

之前抓过它的请求,发现,请求里面,单词上限是通过: max_voc_count 这个字段表示的,我们搜一下关键字,定位到一个Model:APIUser

显然这个maxVocCount,是和max_voc_count对应的Model属性。我们Hook掉它的get方法,估计战斗就能结束了。

写插件

%hook APIUser

- (void)setMaxVocCount:(long long)maxVocCount {
	%log;
	NSLog(@"APIUser的 set 方法被调用了!!!");
	%orig(10000);
}

- (id)init {
	NSLog(@"APIUser的 init 方法被调用了!!!");
	return %orig;
}

%end

从打印看,macVocCount是修改成功了的,但是界面并没有生效...奇怪

2018.5.2

继续尝试~

这次从选词界面入手吧...当词汇选满之后,会弹出提示不让选了。

需要查看下点击确定按钮时候它的逻辑...

VC: SelectViewController

VM: SelectViewModel - 等下可以突破下它

关键属性:WYPopoverController *_popover;  - 貌似是控制弹框的 - WYPopoverControllerDelegate  VocDetailViewControllerPopDelegate


父VC: MMViewController

关键属性:PopoverHelper  #"<PopoverHelper: 0x137d69c90>"

2018.5.3

不甘心...目前还没掌握LLDB & IDA这两个神器,想修改东东只能靠读文件名和猜测...早点学好这两个神器才行呀!

感觉自己第一次的思路木有问题,又沿着第一次的思路,全局搜了下maxVoc这个关键词,结果奇迹出现了

尝试修改这三个model的相应set方法,果然,效果达成了~🎉🎉🎉

看来关键Model是SystemCheckUser这个东东,这里存的才是核心数据...

总结

  1. 心要静,要坚持
  2. 尽快掌握LLDB和IDA...
  3. 打个包给大可同学用...