首页
社区
课程
招聘
[原创]关于某ios app登录关键字加密分析
发表于: 2017-11-21 14:11 9277

[原创]关于某ios app登录关键字加密分析

2017-11-21 14:11
9277

需要工具:

越狱iPhone

cydia

*openssh和socat

IDA或者HOPPER dis
个人感觉这两个工具虽然目的一样,但用起来还是差别还是很大。HP动不动就卡的半死,IDA虽然是业界大佬,速度也比较快,不过伪代码的重建还是优化不如后者。HP的最大有事就是简洁,用过IDA的基本打开就能用,界面上太友好了(关键是把常用的功能放在了最显眼的地方,要不是突然就会卡死,我还真是不想用IDA了)

frida

charels

lldb,debugger这两个在过程中没咋用,也没啥效果最后,不过也有些心得。

##charels抓包

这种在数据包中的分析当然还是老套路,抓包。
n6第一次
appid yidian
cv 4.5.3.11
distribution com.apple.appstore
idfa 8d3b3828bdc029855abafa0b6d0b20ea
net wifi
password c035b72a0ceb25e42962c8452b81fd90c8a073b1
platform 0
reqid 1511164920272_10
secret 500a9c8432161edb6502cc9962be9f7ef77d84e5
username HG_65B678294F40
version 020130

n6第二次
appid yidian
cv 4.5.3.11
distribution com.apple.appstore
idfa 8d3b3828bdc029855abafa0b6d0b20ea
net wifi
password 2c3e94aa43f37c8134df8f7e2a6460fdc8fd9684
platform 0
reqid 1511165339686_10
secret ad86d687fc19a8d83bc5229fbcb529dfbeee2ece
username HG_227900D833DE
这里我省略了header 的具体数据,没啥大用,直接照办就行。我们从上面的分析,和最后的验证过程会发现。这个过程中,最关键的两个加密点就是password和secret关键字。当然username也发生了变化,这个是随机的我们不管了。

##静态分析

我们启用HP和IDA,分析过程有好几分钟,等下吧。
void -[RRNetWorkingHelper configureSignNatureWithClientType:clientVersion:clientSecret:](void self, void _cmd, void arg2, void arg3, void ret_addr) {

unsigned int -HpEngine loginAsGuestAllInOneWithUserName:distributionChannel:
通过关键字找到了三个函数,接着我对这三个函数的条用毁掉过程进行了漫长的分析,好像有一天。
最后发现其实根本没必要。这里为了还原过程还是说一下把:

tryToRegisterGuest 到最后这里 r11 = [[HpUser guestUser] retain];
有一个初始化客户登录的过程我们跟进去。

很显然我们的加密函数encryptedPasswordForUser:r5根据字面意思会加密password,但这其实是object-C的库函数,我还以为是自定义的。之后找了半天secret关键字,愣是没找到加密在那。

##编写挂钩程序
最后经同事提醒,把这个加密函数和里面的md5 sh1统统挂钩后,发现。如下:
Nov 21 09:52:55 4goukuni yidian[7063]

Nov 21 10:04:49 4goukuni yidian[7218]

Nov 21 10:15:14 4goukuni yidian[7252]

这里要重新charels一下,一对比发现,想骂人了。分本就是条用一个函数生成的这两的关键字。
生成过程引用了相同的usename,不同之处在于字符传拼接过程引入的数据不一样。
3958dde99ed6ed817adfee423ebeb4fa613196db
yidian
根据最后一组的数据判断,拼接用到的字符串分别是以上两个。那么现在加密函数出来了。

void -[NSString encryptedPasswordForUser:](void self, void _cmd, void arg2) {
stack[2043] = r4;
*((sp - 0x14) + 0xfffffffffffffffc) = r8;
r5 = [[arg2 lowercaseString] retain];//,HG_D55370101219
r6 = [[self MD5] retain];
r7 = (sp - 0x14) + 0xc;
r4 = [[r5 stringByAppendingString:r6] retain];
[r6 release];
[r5 release];
r5 = 0x3e8;
r8 = @selector(SHA1);
do {
r7 = r7;
r6 = [objc_msgSend(r4, r8) retain];
[r4 release];
r5 = r5 - 0x1;
r4 = r6;
} while (r5 != 0x0);
r0 = [r6 autorelease];
return r0;
}
就是这玩意。

我发现,分析这个加密过程有个规则。因为我们加密关键字一般要勇担现有的加密库,所以分析的时候所以不管三七二十一现把貌似的加密库函数挂上,跟踪一下,很快就能发现这个加密规则在那。自己在那分析了半天不能说没用,有点没找到北的感觉。

##关于lldb和debugserver
这个东西在用的时候真心不是一般的纠结,很多功能自导可以查,但是就是查不出来。我这里找到个偏门的,没大验证。不过以后可以留着用下。我们对函数下段一般是要先找到基地址,然后在找偏移算出实际地址。但在lldb中当一大片基地址划过的时候,我的心是崩溃的,黑压压的一片,啥玩意都找不到。当然,应该能找到,我只是说比较不方便。
这里我可以先在关键函数附近下个钩子弹出一个窗口,然后我们在 lldb端 process interrupt终端一下,然后跟踪,应该就能找到。不过有可能断的地方不是在我们需要的模块上,有点鸡肋了。
以后在改进吧

 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 14855
活跃值: (6083)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
没有加壳吗?不需要砸壳?那就简单多了。
IDA静态分析应该就可以了
2017-11-21 14:50
0
雪    币: 40
活跃值: (702)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
tDasm 没有加壳吗?不需要砸壳?那就简单多了。 IDA静态分析应该就可以了
=  =Clutch2基本能砸壳除非故意在directory动了手脚等方式修复下又能愉快的砸砸砸了
2017-11-21 17:01
0
雪    币: 14855
活跃值: (6083)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Dlnn = =Clutch2基本能砸壳除非故意在directory动了手脚等方式修复下又能愉快的砸砸砸了
我知道砸壳不难,只是没有IOS设备。
不排除自己加壳的(不是apple加壳的)。
2017-11-22 14:13
0
雪    币: 40
活跃值: (702)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
tDasm 我知道砸壳不难,只是没有IOS设备。 不排除自己加壳的(不是apple加壳的)。
=  =自己家的壳上不了app  store  一般正儿八经的想要人气的APP都不会干这脑残事
2017-11-23 03:44
0
雪    币: 14855
活跃值: (6083)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6



Dlnn

= =自己家的壳上不了app store 一般正儿八经的想要人气的APP都不会干这脑残事
你搜索一下IOS加壳工具?还是有的。例如:爱加密就有IOS版,不仅仅是安卓版的。
apple并不会自动判断上架到app  store  是否已加壳,它会再加一个壳。
再就是并不是所有的应用都要从apple store下载,可以用xxxx助手等下载。
2017-11-23 08:44
0
雪    币: 290
活跃值: (43)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
tDasm Dlnn = =自己家的壳上不了app store 一般正儿八经的想要人气的APP都不会干这脑残事 你搜索一下IOS加壳工具?还是有的。例如:爱加密就有 ...
我觉得几维加固比爱加密好
2017-11-28 16:30
0
游客
登录 | 注册 方可回帖
返回
//