首页
社区
课程
招聘
[讨论]黄河Flash播放器算法分析
发表于: 2010-3-21 10:45 6374

[讨论]黄河Flash播放器算法分析

2010-3-21 10:45
6374

想了想,还是发到这个版块来了,如果不合适,就辛苦版主了。因为这软件很久不更新了,难度也不是很大,适合初学者练手,嘿嘿。
【文章标题】: 黄河Flash播放器算法分析
【文章作者】: gtboy
【作者邮箱】: lywbff@163.com
【软件名称】: 黄河Flash播放器
【下载地址】: 自己搜索下吧,很久不更新了
【保护方式】: Aspack,SN
【使用工具】: od
【操作平台】: xp sp3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一款08年的软件,作者已经不更新了。flash现在随便一个播放器就可以搞定,可能这是作者退出的原因吧。在pyg上看到有个SMC教程用这个软件做例子,就下载下来分析下。
  软件是明码比较,可以很容易做内存注册机,为了锻炼下自己,跟进算法call分析
  软件用aspack加壳,esp定律到入口,看样子是个Delphi的程序。超级字串参考,查找注册,有注册成功和注册失败,双击来到关键点。大家要写程序的时候一定要隐藏信息啊。
  

004BBB88 50 PUSH EAX
004BBB89 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
004BBB8C 8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]
004BBB92 E8 2D41F8FF CALL 0043FCC4
004BBB97 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; eax中为id
004BBB9A 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] ; edx中为假码
004BBB9D E8 1ADFFFFF CALL 004B9ABC ; 算法call
004BBBA2 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; edx为真码
004BBBA5 58 POP EAX ; eax为假码
004BBBA6 E8 3D91F4FF CALL 00404CE8 ; 比较call
004BBBAB 75 34 JNZ SHORT 004BBBE1 ; 关键跳
004BBBAD B8 40BC4B00 MOV EAX,004BBC40 ; 注册成功!
004BBBB2 E8 51CFF7FF CALL 00438B08
004BBBB7 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004BBBBA 8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
004BBBC0 E8 FF40F8FF CALL 0043FCC4
004BBBC5 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
004BBBC8 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
004BBBCB E8 88D1F4FF CALL 00408D58
004BBBD0 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004BBBD3 E8 6CFEFFFF CALL 004BBA44
004BBBD8 8BC3 MOV EAX,EBX
004BBBDA E8 9D0AFAFF CALL 0045C67C
004BBBDF EB 0A JMP SHORT 004BBBEB
004BBBE1 B8 54BC4B00 MOV EAX,004BBC54 ; 注册号不对!
004BBBE6 E8 1DCFF7FF CALL 00438B08
004BBBEB 33C0 XOR EAX,EAX

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

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 1045
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
lai   kan kan
2010-3-22 22:31
0
雪    币: 472
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
//第一次尝试着写KeyGen
//程序写的不够简洁,一方面是为了与程序反汇编的结果相近,另一方面是太久没用C++了
//大侠看了别笑话
//其中的不足还望多多指教

#include <iostream.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char ID[12];//="ID674224765";
    cout <<"你的识别码是:";
    cin >>ID;
    ID[11]=1;//对应 004B9FE7  MOV EDX,hhflash.004BA0D0 多了个1
    char XORKey[]="Qwert yuiop asdfg hjkl zxcvbnm";
    char ChooseKey[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    char RegCode[31];
    RegCode[31]=0;
    int IDLen=12; //ID的长度
   int SI=ID[0];
    int EBP_8=SI * 0x64;
    int EBP_A=SI<<9;
   
    for(int BL=1;BL<0x1F;BL++)//
    {
        int AL=ID[BL % IDLen];
        int DL=SI>>8 & 0xFF;
        AL=AL ^ DL;
        AL=AL^ XORKey[BL-1];
        AL+=IDLen;
        AL=AL & 0xFF;//取低8位
        AL =(AL % 0x3E)+1;
        RegCode[BL-1]=ChooseKey[AL-1];
        SI= (SI + RegCode[BL-1]) & 0xFFFF;//程序中是16位SI寄存器,取低16位
        SI=(SI * EBP_8) & 0xFFFF;
        SI=(SI+EBP_A) & 0xFFFF;      
    }
    cout <<"你的注册码是:"<< RegCode << endl;
      system("PAUSE");       
  return 0;
}
2010-3-25 23:50
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
正好送给你玩一下 呵呵 http://bbs.pediy.com/showthread.php?t=100928
2010-3-29 16:16
0
雪    币: 246
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
好多修改方法啊,感谢nisy前辈的指点,总感觉自己太浮躁,太重视结果,不肯认真分析,呵呵
2010-3-30 21:47
0
游客
登录 | 注册 方可回帖
返回
//