低成本打造全功能wifipineapple(软件篇一)
0x01 前言
首先跟大家说句抱歉,好久不更新文章了,大约一个两个月吧。由于目前工作比较忙,也没什么时间去写文章。最近跟村长PY了一个版主,挤挤时间写一篇吧。
原本我是不打算写这篇文章的,写这篇文章可能会加大各种奸商的生长。但是我以后也是会一直上班的,感觉这个技术在保留也没啥意义了,经过我的反复思考,打算把这篇文章还是写出来。供大家一起学习。
写文章之前点DISS一下
首先先曝光几个奸商,自从我写完硬件篇就开始去咸鱼上骗小白了。

https://imgchr.com/i/UlwPUg

其实笔者不反对所有人的这种交易行为,毕竟也有很多入门玩家并不会使用风枪,并不会自己去换IC。老玩家帮忙去换一下并且收点手工费其实似乎很符合常理。但是硬件成本100,技术与研发成本为0,你收人家新人299的手工费,是不是有点太过分了?我想问一句,你作为一个前辈,你要脸吗?
还有极客之眼,不要脸到极致的人。一套菠萝派卖600多?请问您是有多缺钱,技术不咋地还到处骗人。请问你脸呢?
0x02 Issues
肯定遇到了以下几个问题:
1.您无论怎么点pineap里面的switch 都是disabled

2.点击recon 要求您开启pineap 而pineap无法开启 recon也无法正常使用

这是正常现象,因为WiFipineapple公司早就料到了这种盗版现象。于是在pineapd的二进制文件中写了保护。所以pineapd在非菠萝派官方机器上会自动拒绝运行。经过分析,该程序会出现如下状况。

直接执行pineapd 会提示段错误。
这个问题其实我在写硬件篇1之前就发现了。pineap属于菠萝派内核心功能,如果缺了它菠萝派就没了灵魂。经过查阅了些资料。感觉百度谷歌并没有什么卵用。最后经过了两天苦苦研究,终于成功crack。
0x03 Crack
1.下载最新固件,
这里直接拿最新固件做演示。最新固件版本2.7.0

2.解包
我用的是binwalk。用其他解包工具也可以。只要是支持squashfs的解包工具都可以。解包的目的是为了得到pineapd文件。如果你比较懒,也可以从wifipineapple上面直接下载

3.打开usr/sbin目录,并找到pineapd
这里面放着需要我们给打patch的pineapd

4.使用Ghidra载入pineapd
我用的Ghidra是最新版的,截止目前为止,Ghidra最高版本为9.1.2

5.打开Ghidra的字符串窗口
幸好wifipineapple官方爸爸没有给pineapd加壳,要不然就凉凉。打开字符串窗口会发现有几个shell命令

6.找到鉴权部分数据段
跟进这几串shell命令的数据端,找数据段的意义在于下一步的交叉引用,可以清楚的看到代码端里哪些逻辑代码引用了该数据

7.交叉引用
交叉引用 看看哪些函数使用了该数据。发现地址为0040e960这个地址引用了这段数据

8.根据交叉引用找到验证函数逻辑代码,并得出patch方法
这段开始就是pineapd验证函数的逻辑了 右边是流程图。

为了方便大家能看懂比较恶心的mips汇编,这里直接查看伪代码。

从伪代码我们可以直观的看出来,验证成功的话是会return _s2的 而_s2为指针变量,很有可能会被其他函数所调用。这时有两种方案可以达到验证bypass 一种是直接修改这个程序中的数据端,来实现使这个程序执行非预期的shell命令,并按照程序本身的运作继续把shell命令的返回值读入程序中,经strcmp命令后则返回正常。第二种方法则是直接修改运行环境中的dmesg,使dmesg经过原本的shell命令输出正常即可。
这里我给大家介绍第一种方法,首先先构造一个输出 44b65156的shell命令。
用echo 和awk什么的都可以。这里我用到的是awk命令
awk 'BEGIN{print "44b65156"}'
or
echo "44b65156"

9.修改执行shell时的命令,使给__S2指针变量正确赋值
ghidra对于修改字符串还是比较简单的,找到字符串的物理地址就可以直接在编辑器里面对字符串做修改了。
对于原本命令很长,我们要改的命令很短怎么办?直接用20 也就是空格键填充即可

再次查看伪代码

/* WARNING: Unknown calling convention yet parameter storage is locked */
/* gtmgc() */
char * gtmgc(void)
{
char *__s2;
int iVar1;
__s2 = (char *)exec("cat /proc/cmdline | awk \'{ split($1,x,\"=\"); print x[2] }\'");
iVar1 = strncmp("WIFI-PINEAPPLE-NANO",__s2,0x13);
if (iVar1 == 0) {
__s2 = (char *)exec(
"awk \'BEGIN{print \"44b65156\"}\' "
);
iVar1 = strncmp("44b65156",__s2,8);
}
else {
iVar1 = strncmp("PINEAPPLE-TETRA",__s2,0xf);
if (iVar1 != 0) {
return (char *)0;
}
__s2 = (char *)exec("dmesg | head -n4 | awk \'FNR == 4 { print($5, $6) }\'");
iVar1 = strncmp("AR9344 rev",__s2,10);
}
if (iVar1 != 0) {
return (char *)0;
}
return __s2;
}
10.上机测试
现在运行pineapd不在提示段错误,说明之前的patch行为对程序来说还是有效的

web端测试
可以成功开启Pineapd 无任何异常

等一会会自动发现ssid pool内多出来ssid

recon也可以正常发现wifi

shell命令测试

pineapd也工作正常
破解完成
最后
-
本文不欢迎 “奸商” 阅读,不欢迎奸商用此方法谋取暴力。尤其是极客之眼,点你名一点没毛病。
- 欢迎大家一起学习,并交流技术。
