首页
社区
课程
招聘
[旧帖] 求助下面的算法如何写出解密算法 0.00雪花
发表于: 2016-9-23 10:01 2995

[旧帖] 求助下面的算法如何写出解密算法 0.00雪花

2016-9-23 10:01
2995
有8个数通过下面汇编加密到了 [ecx+E] 里面,不知道这样的算法如何通过[ecx+E]解密出这个8个数,下面是汇编代码

27078970 >/$  55            push ebp
27078971  |.  8BEC          mov ebp,esp
27078973  |.  837D 0C 00 cmp [arg.2],0                                    ;  和0比较,获取的内容和0比较
27078977  |.  74 0A         je short 27078983                                ;  
27078979  |.  8B45 08      mov eax,[arg.1]              ;  这个是push进来的数据
2707897C  |.  0941 0E      or dword ptr ds:[ecx+E],eax
2707897F  |.  5D             pop ebp
27078980  |.  C2 0800      retn 8
27078983  |>  8B55 08     mov edx,[arg.1]            ;  arg变量是压入的变量
27078986  |.  F7D2          not edx
27078988  |.  2151 0E      and dword ptr ds:[ecx+E],edx
2707898B  |.  5D             pop ebp
2707898C  \.  C2 0800      retn 8


[ecx+E] 是一个dword数据 初始化的时候是FFFFFFFF,加密后会变
[arg.1] = 1,2,4,8,16,32,64,128(8个数对应的,每次循环取一个,按照顺序取)
[arg.2] = 原型是加密的数据
现在知道[arg.1]  [ecx+E],和上面的算法,怎么解出原型,
求指点第一次学这东西

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 134
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
if(arg2 == 0)
{
  E &= ~arg1;
}
else
{
  E |= arg1;
}


看起来arg2只有是不是0的判断,所以你只用看arg1跟E之间的关系符合 上面代码里的哪一种就行了
2016-9-23 11:24
0
雪    币: 150
活跃值: (1105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=XXxiaofeng;1446128]
if(arg2 == 0)
{
  E &= ~arg1;
}
else
{
  E |= arg1;
}


看起来arg2只有是不是0的判断,所以你只用看arg1跟E之间的关系符合 上面代码里的哪一种就行了[/QUOTE]

原型是8个数字,这样我怎么得到这8个数字 你这样还是在E里面
2016-9-23 12:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这个可能吗?这8个数只是用于条件判断,你要解密也只能知道这8个数是不是为0。
2016-9-23 16:20
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这。。还真不知道
2016-9-23 16:41
0
雪    币: 150
活跃值: (1105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我用OD跟踪

将这8个数据循环
0        1        1        -1        1        1        -1        0

基数
1      2       4       8     16     32     64     128

[ecx+E]
初始化是  FFFFFFFF

27078970 >/$  55            push ebp
27078971  |.  8BEC          mov ebp,esp
27078973  |.  837D 0C 00    cmp [arg.2],0                            ;  [arg.2]上面8个数依次压入 和0比较
27078977  |.  74 0A         je short 27078983                        ;  EasyRPG.27078983
27078979  |.  8B45 08       mov eax,[arg.1]                          ;  这个是基数
2707897C  |.  0941 0E       or dword ptr ds:[ecx+E],eax
2707897F  |.  5D            pop ebp
27078980  |.  C2 0800       retn 8
27078983  |>  8B55 08       mov edx,[arg.1]                          ; 这个是基数
27078986  |.  F7D2          not edx
27078988  |.  2151 0E       and dword ptr ds:[ecx+E],edx
2707898B  |.  5D            pop ebp
2707898C  \.  C2 0800       retn 8

现在我想通过 循环处理后的 [ecx+E] 内容 和已知的基数 怎么循环还原得到上面8个数
第一次学习解算法,好迷糊
2016-9-24 12:53
0
游客
登录 | 注册 方可回帖
返回
//