miracl库函数调用问题求助

miracl库函数调用问题求助,第1张

有些朋友问起这塌塌谈个,所以,我在这里写出自己的方法和大家一起探讨。如果谁有更好的方法,也希望能贴出来和大家分享。

2.  以miracl库为例。

【工具】

1.  IDA 5.0 Adv 5.0.0.879

2.  CryptoSIG.v2.0

3.  OllyDbg v1.10

4.  我的第14个CrackMe_0014及其源代码RSA.c

5.  PdriLl的KenGenMe nr.2

6.  《加密与解密II》配套光盘中chap06的一个例子 RSA_CrackMe

【自动定位】

以CrackMe_0014为例。我的建议是你自己先至少粗略分析一下这3个CrackMe,以了解其加密流程,后面可能更好理解我试图要阐述的东西。

1.  把CryptoSIG.sig文件拷贝到IDA的sig目录下;

2.  用IDA载入程序,等待它分析完后在IDA View-A窗口内右键切换到Text View模衫如式;

3.  按Shift + F5键调出List of applied library modules窗口;

4.  右键选择Apply new signature或者按Insert键d出如下窗口

5.  选择CryptoSIG,点击OK

总共有55个函数被重新标识。

你可能留意到了HTBTeam小组,感谢他们为我们带来这么好的东东吧J

6.  在IDA的File菜单中选择Produce file à Create MAP file保存之团碰;

7.  用Ollydbg 载入程序,在菜单中选择 插件àLoad MapàLoad Map File后,来到看看。

004024B1 51 push ecx 004024B2 52 push edx 004024B3 895D E8 mov dword ptr ss:[ebp-0x18],ebx 004024B6 8945 DC mov dword ptr ss:[ebp-0x24],eax 004024B9 C745 D4 088000>mov dword ptr ss:[ebp-0x2C],0x8008 004024C0 FF15 C0104000 call near dword ptr ds:[<&MSVBVM60.__vbaVarTstN神尺>msvbvm60.__vbaVarTstNe 004024C6 8D4D E4 lea ecx,dword ptr ss:[ebp-0x1C] 004024C9 8BF8 mov edi,eax 004024CB FF15 EC104000 call near dword ptr ds:[<&MSVBVM60.__vbaFreeObj>msvbvm60.__vbaFreeObj 004024D1 8D4D D4 lea ecx,dword ptr ss:[ebp-0x2C] 004024D4 FF15 0C104000 call near dword ptr ds:[<&MSVBVM60.__vbaFreeVar>msvbvm60.__vbaFreeVar 004024DA 66:3BFB cmp di,bx 004024DD 74 0B je short CrackMe?004024EA 非明码比较扮瞎老 跳过最后哪个厅升je就KO了

满意请采纳

AES的全称是Advanced Encryption Standard,即高级加密标准。该项目由美国国家标准技术研究所(NIST)于1997年开始启动并征集算法,在2000年确定采用Rijndael 作为其最终算法,并于2001年被美国商务部部长批准为新的联邦信息加密标准(FIPS PUB 197)。

FIPS PUB 197中说明该标准的正式生效日期是2002年5月26日。该标准将被NIST每5年重新评估一次。

AES采用的Rijndael算法乎槐的设计者是Joan Daemen(Proton World Int.l)和Vincent Rijmen(Katholieke Universiteit Leuven, ESAT-COSIC),算法的名字来自两人名字中字母的组合。Rijndael是一个对称的分组加密算法,分组长度和密钥长度都可变,可分别单独指定为 128比特,192比特和256比特。但AES中的数据分组长度只采用了Rijndael中的128比特,而不使用192和256比特,密钥长度和 Rijndael的一致,也分别为128比特,192比特和256比特,并分别被称为AES-128,AES-192,AES-256。

AES和传统的分组密码算法不同的是它不采用Feistel结构(比如DES中采用的),而是采用了三个不同的可逆一致变换层:线性混合层、非线性层、密 钥加层。具体的算法数学基础和过程请祥见: 197.pdf

AES算法的滑顷缺识别、跟踪技巧及Crackme实例分析

1 AES算法的判断识别

AES中有自己特殊的S盒与逆S盒,可以将此作为判别标志,比如:S盒开头为:

637C777BF26B6FC53001672BFED7AB76CA82C97DFA5947F0.....

解密过程使用的逆S盒开头为:

52096AD53036A538BF40A39E81F3D7FB7CE339829B2FFF87....

我们用16进制编辑器打开目标文件搜索,或在内存中搜索,如果找到的话就基本可以确定目标是采用AES的算法。

2 AES算法分析的基本技巧

若要跟踪如何加密或解密的过程,那是非常麻烦的。有一个偷懒的办法,一般C语言的实现AES算法都会在正信辩式加密数据前进行初始化密钥,如果这个Call被你找到的话就可以了,因为这个Call会传递key字符串。找到key就意味着我们可以自己用程序来来计算。

3 实例分析

本实例是lordor[Nuke Group]编写的AES算法的Crackme程序(已收录到光盘,文件是crackme.rar)。

首先可以使用peid来检测crackme.exe,看是否加壳了,还好,Lordor特善良,没有加壳,另外peid有一个插件kanal,可以检查文件中是否有已知的加密手段,我们可以在kanal中明确看到该crackme的确使用了Rijndael。

我们用Softice的symbol loader载入并运行crackme.exe。

点击Help->Register,可以看到程序已经给出了一个code:718368679(注意:不同机器不同,我们称其为机器码)。

然后我们在Serial框内随意输入一个序列号,用Softice下一个断点bpx getdlgitemtexta,

然后点击Check,我们就会发现下面的代码:

:00401248 MOV ESI,[ESP+000004A4]

:0040124F PUSH 32

:00401251 PUSH 0040E374

:00401256 PUSH 000003E9

:0040125B PUSH ESI

:0040125C CALL [USER32!GetDlgItemTextA] 这个Call后,我们在40E374就可以看到刚才随意输入的序列号!

:00401262 PUSH 00

:00401264 PUSH 00

:00401266 PUSH 000003E8

:0040126B PUSH ESI

:0040126C CALL [USER32!GetDlgItemInt] 这个Call后,EAX返回的是0x2ad16fa7,即十进制的机器码718368679

:00401272 PUSH 10

:00401274 PUSH 0040E340

:00401279 PUSH EAX

:0040127A MOV [ESP+14],EAX

:0040127E CALL 004076E6 将机器码0x2ad16fa7转化为字符串形式,即在40E340处放置:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8190897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存