|
Armadillo标准壳扫盲
不是ollymachine的脚本。想直接用vc写插件,当然,锻炼目的为主 |
|
Armadillo标准壳扫盲
顺便请教一下,我正在学写ollydbg的插件,打算做一个自动脱arm标注壳的咚咚(如果能力所限不能完全自动,至少可以做到配合其他工具使用,不需要在od里面慢慢设断点、改magic jump的) 现在遇到两个问题: 1、找到oep后怎么确定iat?也就是说importrec的autosearch是什么原理? 2、如何判断iat里面的thunk是否有效?(importrec的cut thunk原理) ps,这两个问题是只在od完成操作,不借助其他pe工具的情况下。 |
|
|
|
[讨论]很想知道这是什么编码?
没数字的ascii:) |
|
想知道这种编码是什么?
我找了一下,在nsfocus上面没有找到类似的文章,能否给出连接或者具体点的信息? |
|
对某个单词软件的注册算法跟踪了5天
爆破太简单,就几个地方有判断,所以才想写keygen 总算把keygen写出来了,呵呵,直觉是正确的。 本来作者完全可以设计成RSA算法那样,两个密钥只要隐藏掉一个,就算知道解码算法也不可能写出反向编码的程序,可是他的程序里面泄漏了太多秘密。里面涉及到不少数论知识,为了keygen我还手写了一堆高精度的例程。 |
|
[求助]请教脱arm壳的问题
原来破解magic jump就是指这里的处理。按照版大的提示终于知道下一步应该怎么做,magic jump附近的指令和其他教程上的稍微有差别,不过还是认出来,成功破解了。谢谢版大。 |
|
[求助]请教脱arm壳的问题
我自己弄明白了,这里需要手动修复非法指针 我看到里面很多指针里面的代码都是类似 00E6E0E1 mov edx,[EA01B8] // ~= kernel32.dll/00D4/FindNextFileA 00E6E0E7 add edx,64 00E6E0EA call edx 00E6E0EC mov edx,[EA0144] // ~= kernel32.dll/016F/GetModuleFileNameW 00E6E0F2 add edx,64 00E6E0F5 mov ecx,5 所以正确的指针应该是GetModuleFileNameW后面64偏移的那个。arm的壳用这招来混淆辅助工具的判断。我跟踪了一下,FindNextFileA后面的偏移64是GetTickCount,GetModuleFileNameW后面是GetModuleHandleA。可是几十个函数都这样跟踪工作量好大,有没有查表或者其他好的办法呢?请版大帮帮忙,我试过记事本是一下就fix dump成功了,没有碰到过要手动修复的情况…… |
|
[求助]请教脱arm壳的问题
这个问题解决了,前面漏了一步用LordPE把镜像dump出来。用这个镜像exe就可以通过fix dump,可是出来的dump_.exe非法操作,已经用LordPE把IAT修复了(用ImportREC auto search出来那个值)。这是什么原因呢?我看了很多教程都说修复IAT就可以了…… |
|
[求助]那里有这个MFC的资料
跟c的printf差不多,前面是一个格式化字符,后面是参数,返回CString。具体参照任何一本c的编程书籍 |
|
对某个单词软件的注册算法跟踪了5天
今天有了新的想法,从数学直觉角度,我觉得这个函数形成的群和模n剩余系的乘法群是同构的。 因为假如把conv看作模n乘法,并假设_14初始值为1,那么显然该段程序在计算FuncArg2^FuncArg3。也就是说_14的初值是群的零元。不过我没办法从数据上证明我的猜想。也许我应该试试按照RSA的思路,看看当FuncArg3取自己逆元的时候,能不能把编码后的数据解出FuncArg2。 如果证实了这点,再结合这个程序的其他部分研究,可以看出整个算法是一个变形的RSA算法。那样的话这个软件就完全解开了。真奇怪作者居然把两个大质数也直接用硬编码写在代码中。 |
|
对某个单词软件的注册算法跟踪了5天
实在没办法,就只剩下最后一点算法不知道怎样反求写注册机,烦请各位帮忙看看这段算法的功能。偶的数论学得确实不怎样,遇到循环群这些东西就处理不了了 其中B、S、T、FuncArg3是常量,且 T = B^(-1) mod 2^255,是用扩展欧几里德算法计算出来的。 S = 2^255 - T,就是T的取反,其中T有多少个bit就反多少,前面的0不用求反 没有特别说明的话,所有参数都是256bit的整数 算法: _14 = 2^n - B; _1c = FuncArg2; for (i = 0; i < FuncArg3.n_bits; i++) { if (FuncArg3.bit(i) == 1) { _14 = conv(_14,_1c); } _1c = conv(_1c,_1c); } FuncArg1 = _14; return FuncArg1; 其中的函数conv(arg1, arg2): (附上跟踪过程查到的部分数据) 输入变量: arg1= 01272F50 DF A7 0B E1 9C F3 5C 8E 79 94 5E 1C AE E1 F1 31 擐?筌???? 01272F60 3E 6D D2 B9 6C DC 3B B5 E8 61 8B FB A9 38 9E 06 >m夜l?佃a??? arg2= 01272D40 F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9 痼pQ尖?眙?lR派 01272D50 8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08 ?6?..侍?硭r? 函数过程: tmp1 = (arg1 * arg2) % 2^510= 01272CF0 10 8E E6 37 26 A7 12 B6 26 B0 E5 02 41 AC 27 DC ?7&??板A? 01272D00 6F FF 98 80 54 C8 3B E0 A8 EB 63 3D 6F 41 B9 C3 o???啜脬=oA姑 01272D10 D5 16 B0 6B 20 78 10 3B 59 B6 27 34 01 05 43 0C ?半 x;Y?4C. 01272D20 20 16 4A 2D 2C 0F E2 F0 71 BC D1 14 4B 55 3A 00 J-,怵q佳KU:. tmp2 = (tmp1 * S) % 2^255 = 01272CC0 F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9 痼pQ尖?眙?lR派 01272CD0 8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08 ?6?..侍?硭r? tmp3 = (tmp2 * B) % 2^510 = 01272C70 F0 71 19 C8 D9 58 ED 49 D9 4F 1A FD BE 53 D8 23 瘃荣X砩傧?S? 01272C80 90 00 67 7F AB 37 C4 1F 57 14 9C C2 90 BE 46 3C ?g??W??F< 01272C90 22 23 08 BD 3D 39 D5 5E 1D 84 9F 01 35 A4 9F 58 "#?9辙?5?X 01272CA0 27 EF D0 1C 7E F5 22 74 B4 42 20 E2 1A E4 2D 04 '镄~?t绰 ?? tmp3 = tmp3 + tmp1 = 01272C70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01272C80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 01272C90 F8 39 B8 28 5E B1 E5 99 76 3A C7 35 36 A9 E2 64 ??^卞?:?6┾d 01272CA0 47 05 1B 4A AA 04 05 65 26 FF F1 F6 65 39 68 04 GJ?e&?鲥9h tmp3 = tmp3 >> 255 = 01272C70 F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9 痼pQ尖?眙?lR派 01272C80 8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08 ?6?..侍?硭r? if (tmp3 >= B) { tmp3 -= B; } return tmp3; |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值