能力值:
( LV2,RANK:10 )
|
-
-
2 楼
百度云的链接在这,供非注册会员下载:http://pan.baidu.com/s/1slCktmX
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
湖湘杯?莫非是湖南湘西?有点意思,就我知道家乡大手集中在岳阳,沅江,怀化,吉首那些地方,第一批搭建服务器的人当初玩私服传奇,但是从来没听过这类比赛在湖南举办,可惜我在医院不然会来现场看看
|
能力值:
( LV5,RANK:70 )
|
-
-
4 楼
据说题目很坑。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这题目正常的解法应该是python逆向。我虽然做出来了,但方法比较不可取,当时把程序拖到OD就知道是python打包的exe,但是我又没反编译过python,而且不会解包exe,时间紧迫,于是试着看能不能用最熟悉的OD调试得到flag。试了几遍后,跟小伙伴说能直接用OD把flag弄出来,最后也确实得到flag了,但过程比较艰辛。
最后得到算法如下:
50 78 76 6B 34 6B 59 63 49 56 6C 4A 53 65 4F 3F Pxvk4kYcIVlJSeO?
Pxvk4kYcIVlJSeO?逐个跟位数异或,如P对应的16进制是50,与0异或得到50,x对应的16进制28跟1异或得到79,即字母y;v对应的16进制76跟2异或,得到74,即字母t,依次类推得到结果
50 79 74 68 30 6E 5F 64 41 5F 66 41 5F 68 41 30 Pyth0n_dA_fA_hA0
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不得不说看雪论坛还是比52某论坛大神多多了。
我就是想请教一下你是如何直接用OD是如何定位到关键代码的?直接搜索字符串貌似不可行。
另外我找到了逆向pyc文件无法成功的原因。就是我用的网页版pyc逆向工具,此工具只支持python2.0-2.6的pyc逆向,而无法逆向python2.7以上的pyc文件,所以关键算法没能逆向出来。
解决方案:用uncompyle6逆向pyc文件即可
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你在52发的帖子,我很早就看到了,但我的52帐号由于多年未登录被清理了,所以没办法回你的帖子。
我周末把过程整理下,再回你。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
首先程序是双进程,要开一个OD,让程序跑起来,再开一个OD,附加另一个进程。
附加完成后,也让程序跑起来,这里要注意附加OD中,login程序的线程状态,必须是Active才能继续调试,为什么要说这个,因为我在调试的过程中,经常是挂起的状态,而且不能在OD中恢复线程。
接下来在输入用户名,回车,密码之后下内存断点,断点的位置为python35的第二个区段。然后在login中回车,程序会断下来。
断下来后在OD右下角能看到如下信息,里面有我随便输入的用户名和密码,并得知代码接下来会返回到73CB3D94。
返回后就能来的代码关键位置了,如下图,能看到很多关键信息
下图红框框中就是flag的算法
因为是比赛,不是破解软件,我只需要得到flag即可,所以一些无关紧要的跳转就不要管了让程序跳转到下面的位置,分析算法即可。
能用这种方法得到flag,我觉得也是运气,如果程序更复杂一点,或者没有一些醒目的字符串,就很难了。整个过程并不复杂,但是由于这并不是常规的exe程序,而是python打包的,所以以前常见的断点就不管用了。比赛时经过几个小时的调试,才找到算法位置,还好算法不复杂 。大概过程就是这样,希望能帮到你。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谢谢楼主我看看。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
嗯,看了您的分析,而且已经顺利获取了flag,但是有一个疑问,能否解答一下为什么要在第二个区段下内存断点呢?为什么不是第一个或者第三个呢?
|
能力值:
( LV4,RANK:40 )
|
-
-
12 楼
从输入的提示得到提示的字符串,然后整个内存搜索,你会发现,下个读断点,它只出现在python35这个模块里面,然后看地址你就知道落在哪个内存段。之后就是下断点了。
PS:这个EXE用的是pyinstall打包成的一个EXE。不过我解压完发现提取出来的main.py有问题,无法解析,估计是把头去掉或者是用改过的pyinstall来打包的。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
十分感谢大神的帮助,感激不尽 。
但是有一个地方有问题要指出来:这个程序是console类型的程序,并不是双进程。console的进程应该是系统给它创建的,负责输入和输出,而原进程将输入的数据进行处理,然后通过console窗口输出结果。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
python3.5 编译的有些反编译失败。下了支持3.5的反编译没配置好。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
感谢解释,已经实践过并懂得了原理。
|
能力值:
(RANK:520 )
|
-
-
16 楼
感谢分享!
在附加了第二个进程后,查看模块
看到pthon模块代码段地址后,在代码窗口里直接跳转到该地址
然后搜索参考文本串 里面可以看到Password字符串 双击过去可以看到关键代码
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
在OD中,第一个段为PE头,第二个是可执行代码段。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
我当时就把它当成双进程调试的,而且确确实实有两个进程,需要调试的是第二个进程。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
版主好
|
能力值:
( LV3,RANK:30 )
|
-
-
20 楼
http://stackoverflow.com/questions/6287918/how-to-decompile-an-exe-file-compiled-by-py2exe
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
python
|
能力值:
( LV13,RANK:920 )
|
-
-
22 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
实在感谢各位大佬的帮助,这几个月学了不少知识,再回过头来看其实并不是特别的难,只是当时基础太差
|
|
|