首页
社区
课程
招聘
[旧帖] [分享][推荐]初学OD封包加密分析 0.00雪花
发表于: 2012-2-24 08:18 1724

[旧帖] [分享][推荐]初学OD封包加密分析 0.00雪花

2012-2-24 08:18
1724
一直对封包加密感到比较困惑,最近为了学习方法,特意跟了下某游戏的封包加密方式
游戏封包是经过一级加密,二级加密的方式,一级还没去研究,二级基本上原理上已还原出来
OD跟到的如下
Push eax 一级加密后的长度
Push ebx 一级加密后封包地址
Mov ecx,esi
Call xxxx 加密CALL

CALL内部加密部分
00437035  mov eax,dword ptr ss:[esp+34]  //一级加密后保存地址
00437039  mov bl,byte ptr ds:[eax+ebp]    //得到2字节需加密字节
0043703c  xor bl,0eb                   //先和0eb进行异或运算
0043703f  cmp edi,6                   //首次edi=2,每次加2,当等于6时执行第二种加密,小于6时执行第一种加密,也就是说取前2次为第一种加密,第三次时为第二种加密,
第二种加密过后edi重置为2,也就是说重新第一种加密
00437042  jnz short woool.00437075

/******第二种加密开始********/
//计算两次保存两次
        //首次
00437044  movzx ecx,bl
00437047  and cl,3f    //与运算
0043704a  add cl,3b     //结果+3b
0043704d  push ecx
0043704e  push 1
00437050  mov ecx,esi
00437052  call woool.00402cf0 //保存加密结果
       //再次
00437057  shr bl,2     //先右移
0043705a  and bl,30    //与运算
0043705d  or bl,byte ptr ss:[esp+16]   //和第一种加密保存下的结果进行或运算
00437061  mov ecx,esi
00437063  add bl,3b    //结果+3b
00437066  push ebx
00437067  push 1
00437069  call woool.00402cf0 //保存加密结果
0043706e  mov byte ptr ss:[esp+16],0
00437073  jmp short woool.004370a6
/******第二种加密方式结束******/
/******第一种加密方式*****/
00437075  movzx eax,bl
00437078  shr al,2   先右移2位
0043707b  mov byte ptr ss:[esp+17],al
0043707f  and al,3c  与运算
00437081  and bl,3   与运算
00437084  or al,bl    或运算
00437086  add al,3b  结果+3b
00437088  mov ecx,esi
0043708a  push eax
0043708b  push 1
0043708d  call woool.00402cf0  //保存加密结果
00437092  mov dl,byte ptr ss:[esp+16]
00437096  mov al,byte ptr ss:[esp+17]
0043709a  add dl,dl
0043709c  and al,3
0043709e  add dl,dl
004370a0  or al,dl
004370a2  mov byte ptr ss:[esp+16],al
/******第一种加密方式结束*******/
004370a6  mov eax,2aaaaaab
004370ab  imul edi
004370ad  mov eax,edx
004370af  shr eax,1f
004370b2  add eax,edx
004370b4  lea eax,dword ptr ds:[eax+eax*2]
004370b7  add eax,eax
004370b9  mov ecx,2
004370be  sub ecx,eax
004370c0  add ebp,1
004370c3  add edi,ecx
004370c5  cmp ebp,dword ptr ss:[esp+38]
004370c9  jl woool.00437035      //如没达到长度跳回继续加密

还原加密思路如下:
di=02;
al=0;
bl=0;
for(int cd=0;cd<=length;cd++)
{

bl=char(cd);//这里不是实际代码,意思每次取2字节数据,实际还要修改
bl^=0xeb;//异或运算
if(6-di!=0)//第一种加密方式
{
al=bl
al>>=2  //先右移2位         
al&=0x3c;  //与运算
bl&=0x3;   //与运算
al|=bl;      //或运算
al+=0x3b;   //结果+3b
//写入al;
di+=2;
}
else//第二种加密方式
{
   //首次
cl=bl;
cl&=0x3f;//与运算
cl+=0x3b;//结果+3b;
//写入cl;
   //再次
bl>>=2;//右移2位
bl&=0x30;//与运算
bl|=esp+16;//或运算
bl+=0x3b;//结果+3b
//写入bl
di=0;//重置edi
}
dl=?;
dl=dl+dl;
and dl,3;
dl=dl+dl;
or al,dl;
//esp+16=al;这里写入了
di=di+2;
}

刚到论坛  很想和大家成为朋友 一起讨论问题   刚接触免杀这块 发个文章大家分享下

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,,不过目前比较麻烦的是HTTPS协议包,,请问高手,HTTPS认证数据包怎么解呀?
2012-2-24 10:07
0
游客
登录 | 注册 方可回帖
返回
//