首页
社区
课程
招聘
[求助]熟悉位操作请进:以下过程能否逆推?
发表于: 2008-7-2 11:28 4363

[求助]熟悉位操作请进:以下过程能否逆推?

2008-7-2 11:28
4363
i = 0; 
i_end = 20; 
WORD tmp1,tmp2,tmp3; 
char ch1; 
int result, i_out; 
while ( i < i_end ) 
{ 
    tmp1 = ch_tab2[i] % 9; 
    tmp2 = 1 < < tmp1; 
    tmp3 = ch_tab2[i] / 9; 
    ch1 = ch_tab_unknown[tmp3]; 
    i_out ¦= ((tmp2 & ch1) != 0) < < i; 
    ++i; 
} 
result = i_out; 


其中ch_tab2, result 为已知。

请问上面的代码能够反推出 ch_tab_unknown 么?或者是一部分?

请高手指点反推思路。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 150
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不能反推,穷举吧
2008-7-2 13:44
0
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢二楼的兄弟。
穷举未免太多了吧?假设 ch_tab_unknown 是 30 位char长度,效率不是一般化的低。
并且应该会有多个组合才对。
2008-7-2 15:05
0
雪    币: 150
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是啊,很多加密是不能逆向的,这个是否能简化穷举到是可以考虑一下。不知有牛人来算一下吗。
2008-7-2 17:34
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
5
if ch_tab2[0] = 0
tmp1 = 0
tmp2 = 1
tmp3 = 0
ch1 = ch_tab_unknown[0]
tmp2 & ch1 = ch1 & 1  <= ch_tab_unknown[0] bit 0
i_out |= bit 0 << 0; 

if ch_tab2[1] = 1
tmp1 = 1
tmp2 = 2
tmp3 = 0
ch1 = ch_tab_unknown[0]
tmp2 & ch1 = ch1 & 2  <= ch_tab_unknown[0] bit 1
i_out |= bit 1 << 1; 

....

if ch_tab2[9] = 9
tmp1 = 0
tmp2 = 1
tmp3 = 1
ch1 = ch_tab_unknown[1]
tmp2 & ch1 = ch1 & 1  <= ch_tab_unknown[1] bit 0
i_out |= bit 0 << 9; 

....

so, if ch_tab2[i] = 9 * x + y  (0 <= y < 9)
tmp1 = y
tmp2 = 1^y
tmp3 = x
ch1 = ch_tab_unknown[x]
tmp2 & ch1 = ch1 & 1^y  <= ch_tab_unknown[x] bit y
i_out |= bit y << i; 


结论是可以根据ch_tab2和result确定ch_tab_unknown的大小以及其内容的各个值的某些特定Bit的值. 其他的Bit如果没有其他地方使用的话, 应该可以随意设成0或1.

反推算法:
for each bit i of result 
let ch_tab2[i] = 9 * x + y
so, ch_tab_unknown[x] |= (bit i) << y
2008-7-2 21:04
0
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
多谢arab的回复,经过你的提醒,我发现其实关键在于ch_tab2这个表的设置。
通过不同的内容,可取得unknown_tab中不同位并且排列的效果。

反推算式大概为:
if (((1 << i) & result) >> i) ch_tab_unknown[tmp3] | tmp2;

即判断result的每一位,并且通过ch_tab2来计算设置ch_tab_unknown中的对应bit.

呵呵。果然是可以逆推的。
2008-7-4 16:36
0
游客
登录 | 注册 方可回帖
返回
//