ray's Notes

Read The Fucking Source Code.

0%

论代码命名的重要性

这篇文章将从一个动手的实验开始,而且我们并不写代码。

小事

今天运行了一个Core Data的小程序,习惯性的进入模拟器沙盒去看sqlite文件,不幸的的是,14天前下载的Navicat Premium for SQLite过期啦!

image

想来那天运行了注册码生成程序并未实现注册过程,作为一个专业折腾户,我实在是折腾累了。于是我定位到了这个软件的二进制文件目录并复制到桌面一份。目录见下图。

image

接着打开我早已准备好的利器(Hopper Disassembler v3),在搜索栏里摸索了一番,最后对Navicat Premium给我的提示关键词『Expire』特感兴趣,特感谢。搜出来的第一个方法名字起的也很友好,让我这个渣程序员一眼知道了他要表达的意思。

image

然后我把鼠标焦点放在-[NavicatMain CheckExpired]的第一行汇编代码上,然后选择Hopper菜单栏的Modify -> Assemble Instruction,并在弹出的文本框里输入mov eax, 0x0,然后点击“Assemble and Go Next”,再在文本框里输入ret。如图所示。

image

在x86汇编里,函数的返回值存放在eax寄存器里。0对应BOOL类型的NO,因此我们的patch让-[NavicatMain CheckExpired]永远返回NO。

在Hopper的菜单里选择File -> Produce New Executable…,然后在弹框中选择YES,即可生成一个新的经过修改过的Navicat Premium。最后再拖回原地替换原文件,打开应用看效果吧。

大事

这件小事虽小,总共不到5分钟搞定。而且实践起来相当愉悦哈!确实是,但是我说这些并不是让你去破解人家应用去啊喂。我想说的是我们程序最后发布的时候能不能把那些敏感的关键词 such as :isVip, isPayed, isXXX, checkXXX 什么的换掉。