分类 默认分类 下的文章

引言:

说起与「尝鲜派 iBeta」得渊源,还是要从「尝鲜派 iBeta」的 logo 说起,当时「尝鲜派 iBeta」发起人 Sunbelife 说要创建一个能够提供 Apple 用户便利的网站,我当时负责制作「尝鲜派 iBeta」的 logo。不过后来呢,忙学业上的事情,「尝鲜派 iBeta」那块就没有管,现在大学考上了,有时间了,便加入开发组,与另外几位朋友负责开发新版本的「尝鲜派 iBeta」。

他们分别是:

  1. 0xJacky (主程序开发)
  2. Hintay(开发者)
  3. Sunbelife(创始人)
  4. Hexwell (就是我啦,负责主程序开发)

Github 的「尝鲜派 iBeta」的私库

QQ截图20190617021524.png

总之,非常荣幸能够加入「尝鲜派 iBeta」,利用我的能力为广大 Apple 用户提供便利。当然!希望「尝鲜派 iBeta」越办越好~

前言:笔者这两天在调试一个由 ThinkPHP 开发的站点,在 Windows 下部署一切没有问题,但是当部署到 Linux 系统的 ECS 上就出现了:ThinkPHP —— 找不到模板的错误。

笔者呢,也是研究了好久,其实这个错误的原因是因为 Linux 上对于大小写区分很敏感,Windows 则不然,因此,想要解决这个错误的方法也很简单。但是每个人都有不同的错误原因,所以还是需要自己排查,仔细看下报错时候输出的报错信息。

如果你不知道如何打开 ThinkPHP 的 debug 模式,你需要在你的项目入口处,加入代码:

define('APP_DEBUG',true);

解决方案:

1. 针对使用了省略方法方法来渲染页面的,例如下面的代码。
this->display();

你应该仔细检查你的方法名是否大小写是否正确,因为 ThinkPHP 会默认渲染以方法名命名的页面。简单地说,就是,你的目录下有一个文件为 index.php,那么你在 Controller 中,想要渲染这个页面,你就应该将方法像下面这么写。

function index()
{
this->display();
}

而不是像下面这么写。

function Index()
{
this->display();
}

2. 针对方法名正确,但是还是提示无法找到模板的同学,你应该仔细查看你的 Controller 文件,看看有没有在哪个地方调用了 display 方法,检查名称是否跟你目录的文件名称一致。

3. 如果还是不行,那你应该检查你的伪静态规则,检查是否设置了伪静态,如果你不会撰写伪静态,你可以去查下资料,笔者就不在这赘述了。

其它的原因也是有可能的,只不过笔者还没有遇到,如有同学遇到,欢迎评论提供解决方案。

前言:最近阿里云的某些境外服务器被出口运营商限制,导致笔者的博客不能够正常在境内被访问。咨询相关阿里云工程师得知,当前它们也未收到任何消息,什么时候恢复它们也不清楚。

阿里云工程师给我的解决方案:

QQ截图20190612161630.png

归纳总结下就是:

  1. 在出现问题的 ECS 服务器上次创建自定义镜像
  2. 新购一台 ECS
  3. 恢复镜像到新购的 ECS 上
  4. 配置服务器上的相关文件
  5. 恢复访问服务

前言:

处于研究 iOS 攻防的需要,笔者今天就来浅谈下 iOS APP 逆向工程的具体步骤。为了保护 Target APP ,这篇博文并不会泄漏任何关于 APP 内容以及所涉及到的内部方法。

工具:

正所谓,工欲善其事,必先利其器。因此,我们需要以下几个软件。

  • Hopper Disassembler
  • Class-dump
  • Theos

分别介绍以下这几个软件:

Hopper Disassembler 是一款二进制反汇编器,包含:反编译以及调试。

Class-dump 是一款利用 OC Runtime 机制,导出 iOS APP 的头文件工具。

Theos 是一款用于为 iO S和其他平台构建和部署软件的跨平台工具套件,在这里我们用它编写 iOS Tweak ( Dylib ),检测我们是否完成逆向工程。


砸壳:

如果你是从 App Store 中下载的 iOS APP ,那么你需要进行砸壳,这不是我们本文谈论的重点,笔者就不在这过对赘述。
P.S : 如果你是从 XX助手 之类的地方下载的 iOS APP ,那么它们大都是已经脱过壳的,你只需要找到 Mach-O 文件,就可以开始以下步骤。

分析:

在这里,笔者用的是一款具有付费订阅功能的 iOS APP ,那么我们就需要确定我们解决的问题,在这里当然是:破解付费订阅内容。

导出头文件:

利用 Class-dump 导出已经砸过壳的 APP 。

class-dump -H Mach-O 文件路径 -O 指定生成头部文件路径

分析:

利用 Hopper 查找关键字,这里你可能需要多多使用你的 Target APP ,用来寻找字段。既然这个 APP 有订阅付费功能,那我们就直接搜索 isVip关键字试试看。在这里,我们可以很清楚的看到,确实是有这个关键字的,那么如果你的 Target APP 中没有这个关键字,那不妨多多试试,例如 subscription之类的字眼。

1.png

紧接着,我们选择伪代码分析,我们可以看到具体的代码逻辑。

2.png

我们可以很清楚地看到,这个 APP 利用 NSUserDefaults 用来存储用户订阅信息。那么我们找到对应的头文件看一下。

4.png

打开头文件后,注意笔者画红线的地方,在这个对象中,声明了一个私有属性,NSNumber *is_subscription_user;那到这里也就很明显了,这个对象的私有成员属性的 NSNumber 类型返回给 isVip用来判断是不是付费订阅用户。

编写插件:

我们利用 Theos 创建一个 iOS Tweak 工程,在 Tweak.xm 工程文件中,编写以下代码:

5.png

看到这,细心的同学可能已经发现了,为什么这里给 - (NSNumber *)is_subscription_user; 这个对象方法返回了一个 [NSNumber numberWithInt:1]; 呢?答案你可以在上方的注释中找到。

/**
 Key hack
 @param 强制返回VIP用户
 @return 1 stands for vip; 0 stands for nonVip;
 */

编译插件,安装到我们的 iOS 设备中,我们发现 Target APP 已经成功变成了 VIP 的界面。至此,这款 APP 的逆向工程之路就算是走完了。

小结:

这次的逆向之路之所以这么顺利是因为这个 APP 没有做代码混淆等等反破解手段。如果遇到这些 APP ,肯定需要花更多的功夫,还会用到更多的工具,例如 Reveal 以及 Hopper 代码逻辑分析等等。


另外我之所以写这篇文章,目的是出于研究 iOS 攻防,本篇博文肯定是漏洞百出,如有不正确的地方,还请大家斧正!本人初入 iOS 逆向工程,斗胆在各位大神面前班门弄斧,还请不要见笑。