首页
社区
课程
招聘
[旧帖] IDA伪代码除法还原 0.00雪花
发表于: 2015-1-15 09:07 7904

[旧帖] IDA伪代码除法还原 0.00雪花

2015-1-15 09:07
7904
使用IDA Pro反编译一个程序的时候,得到如下伪代码:

只知道有个什么除法,原始代码肯定不会这么难看吧。

哪位大侠帮我梳理下。

byt1和byt2是两个BYTE类型的数据。

 result1 = ((unsigned int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 31)
                    + ((signed int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 3)
                    + byt1;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

result2 = ((unsigned int)(((unsigned __int64)(0x77777777i64 * byt2) >> 32) - byt2) >> 31)
                    + ((signed int)(((unsigned __int64)(0x77777777i64 * byt2) >> 32) - byt2) >> 3)
                    + byt2;

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1556
活跃值: (853)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
2
第一个:0x0000000077777777*byt1/0x8000000000000000+0x0000000077777777*byt1/800000000-byt1/8+byt1
对否?
2015-1-15 09:22
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像是将数据存到一个字节的某几位, 但是将数据存进去之前,有个加减乘除。
2015-1-15 09:34
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
其实楼主得到的代码已经很明了了,这里还是给出详细的分析吧。

考虑到result1和result2的运算方式极为类似,所以这里只给出result1的详细分析,result2的结果楼主可以参考result1自行分析。

result1分析:

1、((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) :先求0x0000000077777777*byt1的值,然后取该值的高32位最为最终值tmp1(作为无符号int64类型的值)。
2、 ((unsigned int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 31) :带入上步中得到的tmp1,得(unsigned int)((tmp1-byt1)>>31),该式表示取(tmp1-byt1)结果值的高33位作为该结果(将该值看作无符号int类型值),其实无符号int类型应该是32位的,所以该步骤中的最终结果应该是(tmp1-byt1)的第32位到第63位共32位的值,设为tmp2。
3、((unsigned __int64)(0x77777777i64 * byt1 ) >> 32): 先求0x0000000077777777*byt1的值,然后取该值的高32位最为最终值tmp3(作为无符号int64类型的值)。
4、((signed int)(((unsigned __int64)(0x77777777i64 * byt1 ) >> 32) - byt1 ) >> 3):将步骤3中的中间变量tmp3带入该式得,(signed int)((tmp3-byt1)>>3),该值表示取(tmp3-byt1)结果然后右移3位,因为最终转换为了signed int类型(有符号32位),所以该式最终结果为(tmp3-byt1)结果的第4位到第35位值(共32位,并作为有符号数),设该结果为tmp4。
5、所以result1的最终结果为tmp2+tmp4+byt1。

result2结果分析跟这个类似。
2015-1-16 13:05
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,也在查这个问题
2015-10-4 23:39
0
游客
登录 | 注册 方可回帖
返回
//