首页
社区
课程
招聘
[转帖] IDA 7.4.191112
发表于: 2020-1-6 16:37 37209

[转帖] IDA 7.4.191112

2020-1-6 16:37
37209
收藏
免费 6
支持
分享
最新回复 (118)
雪    币: 7
活跃值: (379)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
76
zbzb 链接: https://pan.baidu.com/s/1jK2mdC90ldNmG4XAExBHyQ 提取码: 6gwa 复制这段内容后打开百度网盘手机App,操作更方便哦 转自另外一个帖子里 ...
感谢分享
2020-8-5 22:12
0
雪    币: 7
活跃值: (379)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
77
zbzb 链接: https://pan.baidu.com/s/1jK2mdC90ldNmG4XAExBHyQ 提取码: 6gwa 复制这段内容后打开百度网盘手机App,操作更方便哦 转自另外一个帖子里 ...
大佬,才发现需要安装口令,可以分享下吗,谢谢
2020-8-6 08:19
0
雪    币: 8845
活跃值: (5341)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
78
没有安装密码
2020-8-6 09:29
0
雪    币: 1886
活跃值: (1881)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
79
jon1scr pass = "z1234567890"; // entered password in utf8 hash = sha256(pass); // F2 60 3F A1 4C ...
看起来很难暴力破解了
2020-8-6 10:34
0
雪    币: 940
活跃值: (1063)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
80
uvbs mega呗删了
找一找百毒云, 版主不是分流了一个链么, 我相信你真的想要的话, 一定能找到的
2020-8-7 17:51
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
81
jon1scr pass = "z1234567890"; // entered password in utf8 hash = sha256(pass); // F2 60 3F A1 4C ...

没看懂最后一步sha256的hash结果拿去判断了还是参加解密后再判断?
我做了个hook撸了下日志, 自制安装包在正确和错误密码输入后, 都会有许多decrypt.

ida用假码z1234567890测试结果前半部分和层主相同, 但后面也有额外的decrypt, 不知道这些decrypt是干扰项还是直接会硬解cookfs.

不是很懂tcl, 拿c++做的hook. 或许tcl能直接录出来验证算法把

上传的附件:
2020-8-11 07:06
1
雪    币: 30
活跃值: (910)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
82
曾半仙 没看懂最后一步sha256的hash结果拿去判断了还是参加解密后再判断?我做了个hook撸了下日志, 自制安装包在正确和错误密码输入后, 都会有许多decrypt.ida用假码z1234567890测 ...

google了一下


IDA-Pro-installer-PRNG

ida7.2pass


但这2个 都不是教 brutefore

2020-8-11 14:02
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
83

你大概误解了, 7.2和以前的windows版安装包是inno打包, 脚本生成随机密码, 其需要尝试的时间=单次算法验证*验证次数
验证次数被限制到2^31或2^32次, 每次验证是一个随机数生成(耗时很少)+单次的sha2(耗时较多)
原文作者使用字典法做到10分钟验证完; 而我们不用字典可以做到cpu级别十几秒, 显卡2070s单卡1秒内验证完.
这就意味着如果它密码还是7.2算法, 则总的时间就是installbuilder验证的耗时/inno算法验证耗时. 如果单纯是72楼贴出的部分, 是验证最后一次encrypt后的结果的hash, 那么2070s单卡哪怕需要两万倍inno耗时, 也不过是5~6小时对不对.

所以目前首先需要解决7.4的密码不再是7.2那样的生成算法, 因为缺乏样本, 无法验证是大改还是小改. 如果这个算法能推出来, 需要尝试的次数还是只有2^31或者2^32.
其次, 这个验证过程哪一步后才是判断, 我抓的不同安装包里面, 每次密码验证会sha2->twofish::encrypt*16000->sha2 + twofish::decrypt*251->sha2, 如果我没有遗漏, 这个的时间写个cuda版是可以估算出的.

最后于 2020-8-13 10:59 被曾半仙编辑 ,原因: 更新了剥离出的验证密码代码和日志注入dll
上传的附件:
2020-8-11 15:25
1
雪    币: 4869
活跃值: (2280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
84
曾半仙 你大概误解了, 7.2和以前的windows版安装包是inno打包, 脚本生成随机密码, 其需要尝试的时间=单次算法验证*验证次数验证次数被限制到 ...
如果不知道新版本的随机密码生成算法,纯暴力破解也是无意义的?还是说你的这个思路可以尝试暴力破解?
2020-8-13 21:00
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
85

7.4的随机密码我可以用三段拼接方式生成.
正序4+反序5+反序5
正序5+反序4+反序5
正序5+反序5+反序4
等等等等
但都不是正确的方法 因为我只有一个已知密码情况下 有很多种解

如果确定一种解 需要至少另一个7.4已知密码.
在它能确定算法是这样的以后, 如果rand初始化了三次种子, 它的组合次数就是(2^32或31)^3, 如果只初始化一次种子, 那么依旧是2^32或31, 不会增加组合次数.
有没有意义就要算啊, 要算第二个变量就是算法比之前的sha1运行慢多少. 因为我已经做到2^32次完全验证不到1s, 所以我能容许验证部分能拖慢多少倍, 但我不能容许含有多次重置种子带来的数量级增加.

PS: 验证算法中发现几个有意思地方

1针对twofish解密首块不受全零iv影响, 抛弃了头部两块(应该是安装程序加的垃圾数据),

2安装程序生成安装包的时候, 可以控制这个验证算法的耗时级别, 如果payloadinfo里面times是0/64, 那么顶多是以前慢个几倍. 但IDA的包抓出来这个times是16000.
3文件的解密是跟密码的验证步骤分开的, 在密码验证中也包含了生成cookfs解密的key/iv的操作. 目前看密码验证的是sha2(cookfsiv)的结果是否等于已知hash.
而vfskey也是密文, 由用户输入密码得出的hash参与解密为vfskey明文.
通俗说也就是 通过分析文件解密和密码验证步骤的关系 可以看看有没有利用中间数据的可能. 分析后才知道有没问题, 当然你可以说不用分析肯定没有弱点, 那就我白说了.

4文件解密就用刚才的密码输入时候生成的key和iv列表(256组iv)的一个, 索引已知. twofish来解密, 解密后数据有明文crc32校验.

最后于 2020-8-13 23:13 被曾半仙编辑 ,原因:
2020-8-13 23:08
2
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
86
大佬出手,必属精品
2020-8-14 08:30
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
87

proc ::maui::util::randbuf {length} {
       set result ""
       if {[RLPut unix]} {
               foreach fname {/dev/urandom /dev/random} {
                       if {[catch {
                               set chan [open $fname r]
                               fconfigure $chan -translation binary
                               set result [read $chan $length]
                               close $chan
                       }]} {
                               catch {close $chan}
                       }  else  {
                               break
                       }
               }
       }  else  {

       }

       if {[string length $result] != $length} {
               incr length -[string length $result]
               while {$length >= 2} {
                       append result [binary format S [expr {int(rand() * 0x10000)}]]
                       incr length -2
               }
               if {$length > 0} {
                       append result [binary format c [expr {int(rand() * 0x100)}]]
               }
       }
       return $result
}

# generate payloadinfo
proc ::maui::util::yOZ7q {password times} {
       set ::maui::util::VFSIV ""
       set ::maui::util::VFSKEY [string repeat \0 32]

       package require tcltwofish
       package require sha256

       set vfskey [randbuf 32]
       set passwordKey [randbuf 32]

       # 256 group ivs
       set vfsiv [randbuf [expr {16 * 256}]]
       set payloadIVsHash [sha2::sha256 -bin $vfsiv]

       # prepend
       set encryptedPayloadIVs "[randbuf 32]$vfsiv"
       for {set i 0} {$i < $times} {incr i 64} {
               set encryptedPayloadIVs [tcltwofish::encrypt $vfskey $encryptedPayloadIVs]
       }

       # used in password verify function, too
       set iv [randbuf 16]

       # same as password verify function
       set slowhash [a64bL $password $passwordKey $iv $times]

       # encrypted vfskey, need decrypt by installer
       set encryptedKey [tcltwofish::encrypt $slowhash "[randbuf 32]$vfskey"]

       # pack payloadinfo
       set result [binary format Ia16a32a64a32a* $times $iv $passwordKey $encryptedKey $payloadIVsHash $encryptedPayloadIVs]

       # for builder build cookfs
       set ::maui::util::VFSIV $vfsiv
       set ::maui::util::VFSKEY $vfskey
       
       return $result
}
这个是安装包生成明文cookfs的keyiv的过程. 这里可能有一个穷举次数为2^32*n的已知明文攻击, 需要有其中一个已解包的文件, 然后同样的zlib压缩吻合安装包中文件/记录块的crc, 从随机buffer生成的代码看, 它实际是连续生产了vfskey, passwordkey, vfsiv, 如果作者生成windows安装包的installbuilder是windows版本, 它实际是基于同个种子的其中0x1040个序列. 其中有一部分是已知的, 包含在安装包里. 我们可以首先匹配有哪些不同的种子生成的序列中会出现已知的32字节, 这个的难点是要记录installbuilder在打包时候, 调用到该函数前, "浪费"了多少次rand调用, 最好是固定或者范围较少的.
匹配这个passwordKey需要的次数就是前面说的次数, 需要验证的只是符合的种子.  生成完整序列, 代入加密的数据, iv分组位置, 从末尾解16字节的一组, 看和已知的文件压缩后的末尾是否匹配(有已知文件可以预先生成crc相同的zlib压缩明文, 不需要解整个文件, 但没有已知文件其实也可以选小点儿的多解几次).
理论可行, 回头我hook下installbuilder记录下.

最后于 2020-8-14 10:16 被曾半仙编辑 ,原因:
2020-8-14 10:13
4
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
88
没用安装密码
2020-8-14 10:52
0
雪    币: 444
活跃值: (2911)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
89
能不能吃上免费的午餐就看大佬们了
2020-8-14 10:58
0
雪    币: 5307
活跃值: (9888)
能力值: ( LV9,RANK:181 )
在线值:
发帖
回帖
粉丝
90
曾半仙 proc&nbsp;::maui::util::randbuf&nbsp;{length}&nbsp;{ &nbsp; &nbsp; &nbsp; &a ...
脚本是怎么搞到的? 从内存中DUMP,还是把那些TCL代码解密了 ?
2020-8-14 19:23
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
91
nevinhappy 脚本是怎么搞到的? 从内存中DUMP,还是把那些TCL代码解密了 ?

set cmds [info procs maui::util::*]

set flog [open mylog.tcl a]

foreach {cmdname} $cmds {

    puts -nonewline $flog "proc $cmdname {[info args $cmdname]} {"

    puts $flog [info body $cmdname]

    puts $flog "}"

}

Close $flog


好消息是在windows版的installbuilder生成的安装包,

经过测试能在没有密码的情况下匹配到和密码解密一样的vfskey/iv. rand算法是从tcl的源码拿出来的

坏消息是经过推理, ida作者应该是在同一台机器自动构建三个不同平台的安装包, 这个构建机器是linux/mac的.

在此情况下这些随机序列是脚本从/dev/urandom连续三次读取的. 已知urandom是伪随机序列, 在没有恰巧中途reseed的时候, 应该也有可能用同样的办法炮制.

但我对这个urandom的seed和生成不是很了解, 网上描述的比较玄, 无法估计需要的时间

2020-8-15 06:57
1
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
92
@ZengBanxian
Hello
I Don't know chinese, i am reading your comment with translator!
By the way, is there any hope to crack the password? 
2020-8-15 16:30
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
93
Dynamite5641 @ZengBanxian Hello I Don't know chinese, i am reading your comment with translator! By the way, i ...

old way: need other known 7.4 password, the difficulty of brainstorm is ida using new script to generate 7.4 password, may conatins concat, reverse. you can invite lots of concat method and both of them matched your password. verify each of this method with 16000+251 twofish * 2^31 retry takes long time. I havn't check it on my vga card but I guess each brute-force should take 5+ hours or some day.


new way: need port urandom driver/source to user-space and verify it can generate same sequence with same seed in kernel mode. it related to bugs I found in bitrockinstaller builder, but currently It need installer was built under windows. because I just can't find a unique description on /dev/urandom, even in wikipedia or some funsite.

if urandom is PRNG and can restore same sequence, this bug will affect both build platform, and can use to bypass or re-generate new payloadinfo to IDA installer (which is not built under windows).

2020-8-15 21:04
1
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
94
多谢林版,不过有木有linux版本啊
2020-8-16 03:57
0
雪    币: 221
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
95
没有安装密码,得到安装包也无用
2020-8-16 19:02
0
雪    币: 4869
活跃值: (2280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
96
继续顶起来
2020-8-19 18:37
0
雪    币: 7
活跃值: (379)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
97

帖子不要沉,小白没有能力破解,只能等着各位大佬了

最后于 2020-8-20 08:20 被kofcoco编辑 ,原因:
2020-8-20 08:19
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
98
What's the update on cracking the password 
2020-8-20 21:54
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
99
曾半仙 没看懂最后一步sha256的hash结果拿去判断了还是参加解密后再判断?我做了个hook撸了下日志, 自制安装包在正确和错误密码输入后, 都会有许多decrypt.ida用假码z1234567890测 ...
你这个是计算安装密码的吗?
2020-8-20 22:50
0
雪    币: 4149
活跃值: (1109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
100
来学习一下,多谢版主
2020-8-31 07:41
0
游客
登录 | 注册 方可回帖
返回
//