登录注册
社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
主题 : [ZT]我和电脑亲密接触的心路历程
伍胥之 离线
级别: 军区司令员

显示用户信息 
40楼  发表于: 2011-01-23   
解密生涯
从LQ电脑拿到那本《磁盘机加密原理》后,又让我读得入迷了。 )&b}^1  
c+)36/; X  
感觉过去加密盘的东西,一下子弄明白了。  60Xl.  
wdN>KS2!  
1. 额外的磁道:5吋盘正常是40道,0-39,但是所有的软驱都可以读写第41道,42就不可靠了。3.5吋盘是80道,但是都可以读写82道,83就极不可靠了。因此,有些程序会将部分数据写在标准磁道外(实际上0道是最外圈,额外的都在最内部)。 dXf]G6  
2ID*U d*  
2. 非标准扇区:正常的扇区都是512字节,用代码02表示,但是也可以格式化为1024、2048、256etc,甚至可以将整条磁道格式化为只有一个超级大的扇区(太大了读错的机会会更大)。这也是一种常用的方式。 bUY:XmA  
)3D+gu  
3.道缝/扇缝加密:这应该是软盘加密的终极方案。实际上没有道缝,因为步进电机是固定的。它都本质上都是扇缝。当格式化时,需要提供一个DAP表,表示了格化化条件参数,每道多少扇区,每扇区多大。格式化时,每条磁道上的所有扇区都是定长的。诀窍在于:每个扇区还有自己的参数表需要写入扇区数据区前面的信息块,这里面的数据包括[道号、面号、扇区号],还有一个最特别的数据是扇区长度。不是都是定长吗?为何还需要这个?怪就怪在这里!这个扇区实际大小是在磁道参数表中固定的,但是在扇区信息块中这个值是可以任意填写的。读这个扇区时,必须提供跟这个信息块完全相同的数据块,否则“Sector not found”会等着你。 所以这种加密方式是:格式化时在磁道参数表中提供了一个标准数据,但在扇区信息块中却给出了一个不同的数据。e.q. DAP中声明02(512字节),但是扇区信息块中却声明为03(1024字节)。当读该扇区时,如果指定用02读,扇区找不到,如果用03读,可以读出1024字节,可是实际上只有512啊!于是乎,它读出了下一扇区的信息块,所以会100%地出现CRC校验错误。这就是它的原理。 4eDmLC"Y *  
f }evw K[S  
磁道的真正格式如下: j\i;'t}8g  
hlSB7 D"d  
Sect1 信息区[标志-同步信息[n个F6]-CRC校验值]--扇区数据区[标志-同步信息[n个F6]-数据开始标志-数据区[2^n 格式化为F6]-CRC校验值]-Sect2[....] ---Sect n[.....] ^VM"!O;h{  
!;xf>API  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
41楼  发表于: 2011-01-23   
终极解决方案:INT 0E v%69]a-T  
Pl>nd)i`  
如果明白了这个机理,用汇编写个程序就可以轻易而举地破解了。 bv:0EdVr  
iMOPD}`IX  
江民杀毒的DOS版都是用这种方式加密的。金山毒霸DOS版也是这样。 ;L\!g%a   
Y%n{`9=  
INT 0Eh是一个硬件中断,只为软驱操作服务。只要是软盘操作,最后都会产生这个中断通知系统操作结束。 xr7-[)3Q$  
t(uB66(_F  
所以,可以写一个INT 0Eh的服务程序,记录所以的非标准软盘操作。记下它的位置,保留在内存中某个地方(该中断响应过程中不可以进行磁盘操作,最好也不要调用任何DOS功能,否则可能会引起重入)。 : pE-{3I  
i"2J5LLv  
所以,当里的DOS杀毒出一个版本我就可以破解一个版本。不论是什么加密办法。把程序复制到硬盘运行,它一定会读钥匙盘,记录下来所有的非标准操作。不用修改程序,也不必跟踪它。然后根据钥匙盘的磁盘参数,在标准格式化完成后,再用自己的格式化程序,格式化出一条跟钥匙盘一样的磁道。也就是说,自己配钥匙盘。 '/gxjr&  
F1{?]>G  
我用这种办法,复制出很多盘给朋友。可惜那时没有经济送脑,否则可以自己卖这种盗版盘了。 &CxyP_  
&UJ Ty'  
当KV2000Q版出现后,我突然觉得这技术上没有新意,就不玩了。也不再给他们解密了。除非是我自己用。 r-1yJ  
14@q$}sf  
ArEH%e  
vkNZ -`+I  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
42楼  发表于: 2011-01-23   
硬盘加密 n ##w[7B*  
'aSZ!R  
软盘结构比较简单,编程也简单。所有的软驱都是在端口级兼容的。 vMW -gk   
oJ4mxi@|#  
硬盘则不同,每个厂家都有自己的特别东西,所以访问硬盘只能通过INT 13h。这就限制了加密的方法。 wt_?B_nR  
P@! Q1pr  
我见过的方法很少,一种是写在DOS分区外的某个地方一点东西。另一种是在安装时记录个别文件在盘上的物理位置。因为复制文件到硬盘时,OS根据当前盘上空余情况,选一个地方存这个文件。所以不同的机器上两个文件在同一个地方的概率为无穷小。所以它可以写一个文件,把它标记成隐藏与系统。这样就不比担心磁盘整理程序把它搬家。 dcrJ,>i}  
OW[/%U>  
解密方法也简单,记录文件的物理位置,再复制时,检测一下该位置是否已被占用,如果被占用,把文件搬开。把那个特殊文件写入硬盘的指定位置,然后修改目录与FAT。 ;ZE<6;#3IP  
b}EYNCw_7S  
这个方法,比破解文件本身的算法要简单。
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
43楼  发表于: 2011-01-25   
这个坑是前几天在武汉期间没啥事填的。 y$r?t0  
E:dT_ x<Y  
我知道,其实多数同学都不太懂我写了些啥,因为太老了。 m\}\RnZu  
CwH)6uA  
主要是人老了,有怀旧情结。 |RvpEy7 6  
<Vr] 2mw  
总结一下自己不务正业的过程,给部分同学一点点教训。 |~=?vw< W  
Hjo:;s  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
44楼  发表于: 2011-01-27   
认识C语言
日子不咸不淡地过着,我也不紧不慢地玩着。 ^c [CyZ:a  
nfd?@34"A2  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 BHRrXC\  
wZ\e3H z  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 #IL~0t  
u6bB5(s`&  
我拿起来顺手一翻,发现这个东东对初学者来说是太难了,但是我觉得很有趣。 ([4{n  
o}AqNw60v  
把工作丢到一边,坐下专心致志地看一半个下午,看出味道来了,因为有汇编的基础,所以理解C的东西还是非常容易的。到了下班时间,仍然舍不得放下。于是拿回家接着看,居然看上瘾了,没有吃晚饭,也不睡觉了。到天亮的时候刚好看完。 nHhD<a!  
u[6` Jr~  
我居然连续读了18个小时! Y+PvL|`O  
.@/z-OgXg  
再回到实验室,找来学生装上Turbo C 2.0,就开始下手编程序了。而且TC2.0 有非常好的联机帮助系统,需要啥函数看看说明就可以了。 j .yr 5%  
S*DBY~pZy  
那个学生也非常聪明,我用电脑的时候,他就在旁边看,也不用问啥问题,我们随意地边聊边写程序。到最后,凡是我在电脑上用过的东东,他自己都学会了。 =%nqMV(y  
8en#PH }  
我们一起写了几个程序,把他上的生物统计学课程的各种检验方法都分别写出了一个个程序。据说,十多年后,我们学院的部分学生仍然用那个程序进行显著性检验。 0F;(_2V-  
rTH[?mkf4  
Tr}$Pb1  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
45楼  发表于: 2011-03-03   
VB+Win32 API >/OXC+=^4  
u_/OTy  
ASP
杺栫杣杊椌柮栬,䒴蓉艿芖。
清水 离线
级别: 军长
显示用户信息 
46楼  发表于: 2011-03-03   
引用
引用第46楼伍胥之于03-03-2011 14:21发表的  : [{!j9E?(  
VB+Win32 API - 9<yB  
8!fAv$g0  
ASP 2Z9gOd<M~  
&+r ;>  
介个真的看不懂。 >fzzrD}]  
你说你老啦,喜欢怀旧了,才想起来填坑。 Px?At5  
提醒我也想想,是不是也老啦,是不是也有坑没填呢。
伍胥之 离线
级别: 军区司令员

显示用户信息 
47楼  发表于: 2012-04-16   
又有点想学ASP.NET了。谁可以教我啊?
杺栫杣杊椌柮栬,䒴蓉艿芖。
newport93 离线
级别: 资深会员
显示用户信息 
48楼  发表于: 2012-04-16   
Re:认识C语言
引用
引用第45楼伍胥之于01-27-2011 08:12发表的 认识C语言 : I8wVvs;k  
日子不咸不淡地过着,我也不紧不慢地玩着。 sEi.f(WA  
*ww(5 t  
参加工作两年后,我教过的第一届学生中的一个,读研到了我所在的实验室。他是个很聪明的学生,跟我也很谈得来。 EC\:uK  
{'bkU9+  
他有一天下课后,把他自己上计算机课的课本带到了实验室---C语言。 @{GxQzo  
....... k  5kX  
QL!+.y%  
能搞得定C,还怕什么?网上很多sample, 看看你应该就会了吧。
随遇而安, 知足常乐。
伍胥之 离线
级别: 军区司令员

显示用户信息 
49楼  发表于: 2015-08-29   

杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
50楼  发表于: 2015-08-29   

3Ya6yz  
k$- q; VI  
当年闲得无聊,用DEBUG跟踪出来FDISK居然有一个未公开的参数,就信手写了个小豆腐,发在来浪潮集团的一个小杂志上。 QRa6*AYm  
UC$+&&rO  
没想到,第二年有个专业人士居然在另一杂志上发表了一篇差不多一样一样的文章。 JU +'UK630  
"lb!m9F{  
这是不是叫所见略同呢?
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
51楼  发表于: 2015-08-29   
玩硬盘主引导记录,写动态分区表 [<$d@}O  
!sWBj'[>  
DOS玩了一阵,再玩点啥呢? iFchD\E*o  
6MQ:C'8T&=  
那就看看硬盘分区表吧! .Sw'Bo!Ee  
Oj\mkg  
那个时代办公室用的电脑也就是PC-XT,好一点是286,毕竟不是专业用嘛!能打个字就差不多了。 HaUo+,=  
@x ]^blq  
没有杂志看,也没有攻略,没有目的,就是瞎琢磨。 Qj[O$L0 $  
@y&,e,3!  
一般几十MB的硬盘,都是CHS模式,连LBA都没有。 ?E@[~qq_  
5W-M8dc6  
0道0面一共有17个扇区,最多1023条磁道。 DL为驱动器,80h为第一硬盘, DS:BX为读写缓冲,AH=2(r)/3(w), CH为10位磁道的低8位,AL低6位是扇区号,高2位借给CH,所以最大为1023, DH是磁头号,最大倒是可以到255。CL是读写扇区数,缓冲区应该是不能超过64KB. 那个时候支持的最大磁盘为 1024道* 256面 /道* 63扇区/面.   xM,(|p(  
=i %w_ e  
Mov DL, 80h rmJ847%y`  
Mov DH,00 8Y'"=!3  
mov BX, 1000h ZJM^P'r.1c  
mov cx, 0001 a$& 6a   
mov ax,0201h k= 1+mG  
int 13h k;X1x65uP  
<7) 6*u  
这就把主引导记录读入了地址为DS:1000h的内存。 [p<[83' ]  
K7Tell\`  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
52楼  发表于: 2015-08-29   
U(nassembly) 1000 E.9k%%X]  
把它反汇编出来,就知道它在启动过程中在做什么了。 ]iX$p~riH  
>x gd<  
不过,不能真正跟踪它,只在在脑子里或纸上跟踪,否则立马死机。 yt,;^o^  
EOC"a}Cq-  
因为,执行不了几步,它就把它自己搬到了一个固定的地方0000:0700H这个地方在有OS时是OS的核心地区。 oPZ4}>uV  
yBKlp08 J  
BOIS是固定把这个主引导程序读到0:700H地方,检查这个块的最后一个字是否是0xAA55的。然后才将控制权给它。 bd}SB-D  
sR nMBW.  
它干得活很简单,它把自己复制到另一个地址,并跳过去,检查分区表,一共4*20h的个符,每一项用32个字节,标志了是否可引导,OS类型、分区大小、起始的CHS位置。然后找到一个标记为80h的可引导分区,从对应的CHS读出这个分区的引导记录,也是读 到0:700h,检查合格后就再交给它了。 i|'t!3I^m  
-2d&Aq4m)  
那个时候,我只用过DOS,别的系统从没有用过。 7?#32B Gr  
O UMr}~/  
n/D]r  
但是,我突然发现这4个分区不够用的了。 JFdzA  
4+bsG6i  
因为我需要隐藏点什么,当然,不是艳照,那时不仅没有DC,连扫描仪也没有。 x*V<afLY[  
N Q=YT RU  
9x,+G['Zt  
?Qk#;~\yB  
k JFHUR  
Fowh3go  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
53楼  发表于: 2015-08-29   
地址记错了,不是0:700h,而是0:7c00h
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
54楼  发表于: 2015-08-29   
0000:7C00 XOR AX,AX R0'EoX  
0000:7C02 MOV SS,AX OK(d&   
0000:7C04 MOV SP,7C00 ObzlZP r@  
0000:7C07 STI g.s oN qt=  
0000:7C08 PUSH AX 1fZ:^|\  
0000:7C09 POP ES (7,Awf5D~  
0000:7C0A PUSH AX    CVp<SS(  
0000:7C0B POP DS eRbO Hj1  
0000:7C0C CLD \>k+Oyj  
0000:7C0D MOV SI,7C1B V;(LeuDH|  
0000:7C10 MOV DI,061B X.<R['U&\  
0000:7C13 PUSH AX BZ9iy~  
0000:7C14 PUSH DI Y1IlH8+0  
0000:7C15 MOV CX,01E5   :B~ c>:  
0000:7C18 REPZ   ~yN,FpD  
0000:7C19 MOVSB fO nvC*  
0000:7C1A RETF \f#ao<vQm  
dW68lVWq_  
;跳到这里来了。 Jmx }r,j  
0000:061B MOV SI,07BE YvX I  
0000:061E MOV CL,04 W9"I++~f  
0000:0620 CMP [SI],CH ; |e >-v  
0000:0622 JL 062D   v(~m!8!TI  
0000:0624 JNZ 063B   C"<@EMU9  
0000:0626 ADD SI,+10 TVA1FD  
0000:0629 LOOP 0620 |&7,g  
0000:062B INT 18  ‘ 如果没有可引导的分区,就直接执行一个软中断,这个玩艺,当年叫ROM BASIC Nig-D>OS  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
55楼  发表于: 2015-08-29   
我想干什么呢? qZe"'"3M  
(P-<9y@  
办公室有很多人,我想把游戏、我的个人文件分别放到不同分区上,给每个人定义一个属于自己的分区。 HxaUVg0  
P_U-R%f  
那年头没有什么安全机制啊!所以只能是隐藏整个磁盘。 /+msrrpD  
f'dI"o&^/d  
我用整整一个扇区做分区表,最多可以分成16个分区(我的硬盘才20MB!)。 UEUTu}4y  
wn&2-m*a  
然后用另一个扇区做成一个用户表,反正第一个分区总是从0道的1柱面开始,有十几个扇区在DOS分区之前可用呢!用户表里面定义了用户名、密码和用户可以访问的分区,除大家共用的C盘有DOS外,其它的15个根据权限决定哪一个可以访问。如果在0-15分区中,0,1,5,6,7可被该用户访问,则把0分区变成DOS的主分区,把1567合成一个扩展分区,1为D盘567分别有EFG盘。而对另一用户而言,可能D代表了第9个分区。 ): 6d_g{2  
@@jdF-Utj;  
在引导过程中,主引导记录不含分区表,除了有一个55AA标志外,其余是我自己的代码。加载我的全部代码后,要求用户输入一个用户名、密码,如果校验成功,则根据相应权限,重新合成一个用户对应的分区表,包括了主分区和扩展分区(以及逻辑卷的链表)。 `>Cx!sYhV  
9K!='u`  
然后,根据新生成的分区表,去引导主分区的DOS分区。 q0wVV  
r8rR_ M{P  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
56楼  发表于: 2015-08-29   
还需要一个安装程序,把我们东东直接写到CH0Head0Sect1中。 tUQ)q  
Hik[pV K@  
这些代码都是用汇编写的,不过,我已经会用C了,所以它的管理程序是用C写出来的。就是定义用户表、分区表这样的东东,把它写入一个Binary的文件中。 hh9{md\  
v &n &i?  
居然可以工作了!虽然长得很丑,而且一点也不温油。 [@6iStRg7  
oWmla*nCKL  
我不知道那个时候有没有多操作系统引导程序,所以,我这个也没有多OS,所以我自己给它起了一个名字,叫动态引导。
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
57楼  发表于: 2015-08-29   
很可惜,这些代码我已经找不到了。
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
58楼  发表于: 2015-08-29   
引用
引用第28楼newport93于01-21-2011 17:06发表的  : f@0`,  
老5从FORTRAN玩起的啊,那是相当的牛! }MNm>3  
m| Z)h{&  
现在玩什么了?   :R)IaJ6)  
=R05H2hs  
H< j+-u4b  
现在只会玩VB6.0混合点Win32API了。 amRtFrc|  
\1Zf Sc  
不过ASP用得多一点,我的课基本上都自己弄个网站,让学生交作业或考试。 #XsqTK_nk  
*q RQN+%  
想学学ASPX, 但是我对.net的托管啥得不明白。 )n.peZ  
F r~xN!  
杺栫杣杊椌柮栬,䒴蓉艿芖。
伍胥之 离线
级别: 军区司令员

显示用户信息 
59楼  发表于: 2015-08-29   
Re:回 38楼(伍胥之) 的帖子
引用
引用第39楼suehan234于01-22-2011 08:00发表的 回 38楼(伍胥之) 的帖子 : r$KDNa$/a  
佩服,玩也玩得这么专业! y ;;@T X  
wQ5__"D  
^N]*Zf~N?  
算不上专业,只是瞎捣鼓,或瞎鼓捣。
杺栫杣杊椌柮栬,䒴蓉艿芖。
描述
快速回复

验证问题:
3 * 6 = ? 正确答案:18
按"Ctrl+Enter"直接提交