能力值:
( LV5,RANK:69 )
|
-
-
2 楼
沙发学习123
|
能力值:
( LV7,RANK:100 )
|
-
-
3 楼
学习了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
CPU的Last Branch Record, 头次听说, 只能膜拜
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
1,无法避免单步状态检测
.................
这题还是押宝啊。。。。幸亏没单步检测。。。。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
只能膜拜 无法学习 驱动太强了
|
能力值:
( LV7,RANK:100 )
|
-
-
7 楼
楼主押宝太准了,学习了。
1.假设测试程序只调用系统自带dll,并且是标准调用
2.假设测试程序是单线程
3.假设外部F函数和目标函数都是由exe主程序调用
4.假设测试程序不处理单步异常
5.假设测试程序的循环量和Sleep很小
|
能力值:
( LV7,RANK:100 )
|
-
-
8 楼
楼主源代码里面有这么一句: by shoooo ,难道也是马甲
|
能力值:
( LV12,RANK:760 )
|
-
-
9 楼
对于楼主的高科技的方法,我等只能膜拜
|
能力值:
(RANK:1130 )
|
-
-
10 楼
1,非系统的dll一样可以检测,不信,你可以试试,api获取失败,会进入SearchAll的状态,每次都去尝试搜索第一个api的
2,多线程懒得搞了
3,题目说明里面写了, 都是由exe主程序调用的
4,这个机制问题,没法解决
5,再大也可以处理,除非程序本身运行就会超时
我只赌了2点,1,单线程,2,不检查单步
多线程可以解决的,只是懒得弄了,我觉得,测试用例有多线程会更复杂,时间误差更大(线程切换是需要时间的)
单步无法解决,所以不解决了
|
能力值:
( LV2,RANK:150 )
|
-
-
11 楼
学习为主要目的。
|
能力值:
( LV7,RANK:100 )
|
-
-
12 楼
1.
我的测试程序是这样的:(tmp.dll 和 dll.dll 是同一个文件的2个复制)
LoadLibrary("tmp.dll");
HMODULE hmod = LoadLibrary("dll.dll");
f1 = GetProcAddress(hmod, "f1");
f2 = GetProcAddress(hmod, "f2");
f1();
f2();
因为dll重定位的问题,所以程序没法检测
2.题目原话是“任意给定一个可执行程序A.exe,已知A.exe运行时会调用某外部函数F”,是说A.EXE进程在运行期间会调用到外部函数,其实并没有说明是由EXE模块来调用F函数,可能是任意一个模块或内存区域调用F函数
3.如果遇到了大规模的循环,动态运行等待目标函数的执行显然不行了
如果再赌上5个测试程序未加壳,那用静态检测就是最好的方法了。
|
能力值:
( LV12,RANK:760 )
|
-
-
13 楼
如果代码量不多,一个反汇编引擎就差不多了吧~
|
能力值:
( LV13,RANK:970 )
|
-
-
14 楼
摸顶一下 ~
|
能力值:
(RANK:1130 )
|
-
-
15 楼
1,2 算我题目理解错了吧
1,我理解成测试程序只有一个bin,所以两个文件,要释放tmp.dll dll.dll,这样,我的程序是无法事先获取f1的地址,没有这个api地址,走的是SearchAll流程
3,你写一个试一试呢?
|
能力值:
( LV12,RANK:360 )
|
-
-
16 楼
我的比较简单,就是对系统领域的所有可执行段下断,第一次执行在系统领域就说明被调用了API
|
能力值:
( LV7,RANK:100 )
|
-
-
17 楼
不需要释放dll的。
CopyFile("c:\\windows\\system32\\kernel32.dll", "c:\\tmp.dll", 0);
这样的话事先取得的f1地址是不正确的,所以无法输出正确的结果。f1和f2函数其实应该在模块加载的时候动态取得,但是那5个测试程序都是简单的不能再简单的程序了,所以这些情况都不用考虑,考虑的人反而倒霉。
|
能力值:
(RANK:1130 )
|
-
-
18 楼
你的f1是kernel32.dll里面的还是tmp.dll里面的?
如果是tmp.dll里面我是获取不到的
如果是kernel32.dll,你先把kernel32.dll卸载掉,然后在load进来?
|
能力值:
(RANK:1130 )
|
-
-
19 楼
1,大家都知道这个是赌博题,大家的答案都不是完美的,只是缺陷不一样而已
2,代码发出来是以技术交流为目的的,难道大家喜欢某数字公司的竞赛,src也归主办方所有?
3,如果觉得代码有用,就学习一下,如果觉得没用,shift+del删除即可
4,如果觉得自己的答案也很不错,可以发出来,让大家学习一下
|
能力值:
( LV7,RANK:100 )
|
-
-
20 楼
我是在纳闷为什么这么好的题目配以这么烂的测试程序,题目写的神乎其神,让人有无数的想像空间,而5个测试程序却全是单一简单的程序,其中前2个程序的运行时间居然只有荒唐的10-20ms,导致产生巨大的误差。出题者到底是在考察参赛者的什么能力呢?
我个人认为这道题目的真正难点应该是考察2进制代码检测能力,即当循环时间巨大的时候,应该能够正确控制程序,分析循环内外的代码,结束循环,输出正确的结果。
例如下面的循环:
Beep();
for(__int64 i=0; i<0x1111111111111111; i++)
{
d=c+i+b+c*234;
e=d/4323434;
f=e*2434232;
}
GetTickCount();
如果不小心运行到了里面,应该及时跳出来。更复杂的情况是循环的结果影响目标函数,那就需要分析代码的功能了
Beep();
for(__int64 i=0; i<0x1111111111111111; i++)
{
d=c+i+b+c*234;
e=d/4323434;
f=e*2434232;
}
if(f%2)
GetTickCount();
else
GetCurrentProcessId();
|
能力值:
(RANK:1130 )
|
-
-
21 楼
我的想象力比较丰富,我把这段代码想象成被VM掉了
|
能力值:
( LV6,RANK:90 )
|
-
-
22 楼
只能膜拜,无法学习。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
膜拜啊,都是些没听说过的技术
|
能力值:
(RANK:210 )
|
-
-
24 楼
呵呵。不是的出题的人的水平有你和海风那么高的,或者不是出题人愿意投入的精力有你和海风那么多的。
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
ReadMSR(MSR_DEBUGCTLA, &DbgCtlA);
DbgCtlA.Lo &= ~3;
WriteMSR(MSR_DEBUGCTLA, &DbgCtlA);
intel cpu才能用吧? ╮(╯▽╰)╭
|
|
|