现在是凌晨1点,2016年2月16
无聊中看了一下学校主页,就想试着入侵一下学校网站。
其实对入侵并没有什么研究,毕竟这行见不得光。
但是~对计算机的基础还是有的,于是前期设想如下:
我本身并没有任何黑客工具,木马,一切自己从头动手写程序,尝试吧。
然后我也不知道最后会不会成功,一遍做一别写这篇博客吧。
-----------------------------------------2016/2/16-----凌晨1点06分-------------------------------------------------------
1.找到管理员后台登入地址
正式开始:
登入XX大学教务处 http://jwc.jmu.edu.cn/,手动找管理员登入地址,找不到。
回想儿时的经历,好像很多可以扫描管理员地址的软件。记得初中玩黑客的时候有几款软件 x-scan 明小子等,都可以扫描
于是百度下载明小子,我百度随便下了个 明小子旁注WEB综合检测程序 3.6加强版,扫描 http://jwc.jmu.edu.cn/,
获得管理员登入地址:http://jwc.jmu.edu.cn/admin_index.asp
2.工欲善其事,必先利其器。我们先继续准备我们要用到的东西再写代码。
这里肯定需要一份弱密码字典的。继续百度,我这里下载了好几份,都好大啊,TXT格式的,太大电脑缓存不行打不开。
好蛋疼,于是又百度下载了个TXT文档分割器。(我下载的是这个:万能TXT文本分割器 ,刚才还下载错了宁外一个,结果分割出来的不是TXT,现在这个万能文本分割器
分割出来的才是我要的TXT文档。)
把大的密码文档分割成几个小的文档方便阅读和导入数据库,这里不多说怎么操作了太弱智了,毕竟如果这你都不懂,下文也不用继续看了,先把中学读了吧宝贝。
我这里分割成10MB一个文档(其实最好再分割小点,1MB1个文档最好,方便多线程。但是我懒得再回去分割了。)
3.把分割的TXT文件导入数据库。
首先,下载mysql、navicat
在navicat中新建数据库ruo,utf8字符编码,新建数据库表mima1,字段:id int 自增,主键 , 字段:mima varchar30
右键数据库表导入向导,把txt的密码文档导入到数据库表中,一个txt导入一张表,后面的表就mima2,mima3,mima4以此类推就好了,字段都一样
(这里又要废话一下了,可能命名不规范,还用mima这种拼音,土土土,也没前缀等等等,我这里因为图方便一切怎么方便怎么来了哈哈)
到这里密码也准备好了~~ 好困,其他的改天继续,困困困
-----------------------------------------2016/2/17--------22:12-----------------------------------------------
(大晚上的总算回家可以写点代码了。)
因为这个教务处的后台登入是需要验证码的,所以肯定得做验证码识别。
首先尝试ocr识别。
tesseract-ocr 号称全球识排名第三,百度随便下载一个并安装
http://jwc.jmu.edu.cn/inc/getcode.asp 验证码地址,下载5、6个验证码保存到本地目录
DOS下命令:
1、cd /d 目录地址
2、tesseract 1.jpg 1
识别1.jpg 结果保存在1.txt
直接识别后发现,准确率几乎没有。
于是用JAVA对图片进行处理,一般对简单验证码就是 去背景,降噪,灰度,二值化
这里简要说一下我的处理图片的思路:先用画图打开验证码,放大了观察
3948 数字附近还有淡淡的颜色的阴影,阴影很明显就是颜色比数字淡色的。这种处理方法太简单了(以前无聊的时候研究过验证码识别正好懂)
去这些淡色的噪点我的方法是直接color.getGreen() 获取绿色的值int,绿色值(0~255 从深到浅),小于150的就是我们的验证码,其余的全部不是验证码主体
(这里要提一下,方法很多种,我独爱绿色才经常用这种方法,我也没看网上有人用这种方法,大家可以尝试其他方式)
(为什么是大于150这个临近值呢?可能有人会疑问我这个150的数值哪里得出来的结论呢?很简单,我肯定是先把所有位点的绿色值打印出来,观察一下验证码主体的数值大小比较一下非主体的绿色值大小,主体绿色值一般都在120+,130+,非主体的一般都在200+,我就设置为150为分界了)
完美!
package jmuOcr;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Test {
public static void main(String[] args) throws IOException {
String file ="C:/Users/Mr.wu/Desktop/临时/入侵集合/验证码/4.jpg";
BufferedImage img = getPic(file);
int width = img.getWidth();
int height = img.getHeight();
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
if (isWhite(img.getRGB(x, y)) == 1) {
img.setRGB(x, y, Color.WHITE.getRGB());
} else {
img.setRGB(x, y, Color.BLACK.getRGB());
}
}
}
saveImg(img,"C:/Users/Mr.wu/Desktop/临时/入侵集合/验证码/new4.jpg");
}
public static void saveImg(BufferedImage img,String file) throws IOException{
ImageIO.write(img, "JPG", new File(file));
}
public static void testGetXY(BufferedImage img){
int width = img.getWidth();
int height = img.getHeight();
System.out.println("width:"+width);
System.out.println("height"+height);
for (int x = 0; x < width; ++x) {
for (int y = 0; y < height; ++y) {
System.out.println("wid:"+x+" hei:"+y);
Color color = new Color(img.getRGB(x, y));
System.out.println(color.getGreen());
}
}
}
//获取图片
//file:图片目录
public static BufferedImage getPic(String file){
try {
BufferedImage image = ImageIO.read(new File(file));
return image;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static int isWhite(int colorInt) {
Color color = new Color(colorInt);
if (color.getGreen()>=200) {
return 1;
}
return 0;
}
public static int isBlack(int colorInt) {
Color color = new Color(colorInt);
if ( color.getGreen()<= 150) {
return 1;
}
return 0;
}
}
做到这里后把二值化变成黑白后的验证码图片再DOS下调用tesserct ocr识别一下,吐了一口老血后发现,正确率还是不高!!!!
晚上的时间等于白瞎了。不过不怕,毕竟以前识别过更难的验证码,我还有其他方法。不过今晚是没时间了,留待改天吧。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
因为还没做完就开始上班没时间做,而且不想用CSDN博客,打算换到博客园了。这个会继续抽空写完。