首页
社区
课程
招聘
[分享]看雪论坛.珠海金山2007逆向分析挑战赛
2009-6-9 10:36 23867

[分享]看雪论坛.珠海金山2007逆向分析挑战赛

2009-6-9 10:36
23867
【文章标题】: 看雪论坛.珠海金山2007逆向分析挑战赛
【文章作者】: finn
【编写语言】: c++
【使用工具】: SoftIce
【操作平台】: winxp sp2
【作者声明】: 初入逆向。失误之处敬请诸位大侠赐教!(未完待续。。

【详细过程】

看雪论坛.珠海金山2007逆向分析挑战赛 第一阶段第一题

#include <iostream.h>  
#include <string.h>
  void   main()   
  {   
                char        UserID[10];
                char        serial[20];
                unsigned char UserIDTable[10];
                int        UserIDLength;
                unsigned         ASM_EAX;
                unsigned         UserIDCalc;
                unsigned         ASM_ESI;

                //输入用户名
                cin>>UserID;
                //得到输入的用户名的长度
                UserIDLength=strlen(UserID);
                //计算用户名的特征值前的一个变量赋予的初值
                UserIDCalc=0x13572468;
                //循环计算输入的用户名每一位
                //用户名有几位就循环几次
                for (int i=0; i<UserIDLength; i++)
                        {
                               
                                ASM_EAX=(UserID[i]+UserIDCalc)*0x3721273+0x24681357;
                                ASM_ESI=ASM_EAX;
                                //逻辑左移0x19位(逻辑左移1位等价于数值*2)
                                //如果喜欢可以写个for循环,乘以2循环0x19次。。。
                                ASM_ESI=ASM_ESI<<=0x19;
                                //算术右移0x7位 (算术右移1位等价于数值/2)
                                //如果喜欢可以写个for循环,除以2循环0x7次。。。
                                //本来想用“ASM_EAX=ASM_EAX>>=0x7”
                                //后来发现不等价,随改用内联汇编。。。
                                __asm sar ASM_EAX,0x7;
       
                                ASM_ESI=ASM_EAX|ASM_ESI;
                                UserIDCalc=ASM_ESI;

                        }

                //输出用户名特征值(与反汇编的对照一下看看是否正确)
                //经过验证看来这个特征值是正确的。。。
                for (int j=0; j<9; j++)
                        {
                                __asm sar UserIDCalc,j;
                                UserIDTable[j]=(unsigned char) (UserIDCalc&1);
       
                        }               
                UserIDTable[9]=1;

                cout<<"UserID[0]="<<UserID[0]<<endl
                <<"UserIDLength="<<UserIDLength<<endl
                <<"UserIDCalc="<<UserIDCalc<<endl;
                       
                for (int k=0; k<9; k++)
                        {
                                cout<<"UserIDTable="<<UserIDTable[k]<<endl;
                        }
       
  }



【经验总结】:
1)逻辑左移1位等价于数值*2,ASM_ESI<<=0x19
2)算术右移1位等价于数值/2,
3)“ASM_EAX>>=0x7 ”  不等价于 “ __asm sar ASM_EAX,0x7”

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2009年06月09日 9:20:38

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (6)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bingandhe 2009-6-11 16:13
2
0
累的满头大汗的,真不容易啊。。
继续。。
要有“吸引眼球的东西”,会懂得“个人营销”。。
那出来点“核心技术”来,哪怕只是一点趋势。。
雪    币: 172
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangshen 2009-6-11 19:39
3
0
学习下...
雪    币: 94
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
finn 2009-6-15 10:47
4
0
congratulations。。
kanxue发来注册码。。

定当奋勇争先,不负众望。。
雪    币: 431
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
末日 2009-6-15 19:01
5
0
在家研究研究!!
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wynnyc 2009-6-24 16:01
6
0
学习了。。谢谢贡献好文。
雪    币: 94
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
finn 2009-7-28 17:12
7
0
加了一个流程图,得了个优秀,好happy。。

ps:
以前贴上去的时候,不会发本地图片,转帖一张网络图片,后来发现不能正常显示了。。

通过搜索发现一遍教授如何上传本地图片的帖子。。

于是乎,传了图片上去,附件是图片的vsd版本(由visio制作而成)。。
游客
登录 | 注册 方可回帖
返回