仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 793|回复: 19
打印 上一主题 下一主题

[学习教程] 了解下JAVA的JNI挪用C/C++办法从把持台输出暗码

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开
比来看到一个成绩,怎样用Java完成从把持台输出暗码?
原本觉得是很复杂的成绩,查了一下发明Java竟然没供应如许一个办法。今朝完成的体例有2个,一个是使用JNI来挪用C/C++办法,另外一个是利用多线程。
上面是利用JNI的办法:
起首,写出我们的Java类:
publicclassJNIPasswordReader{
privatenativeStringreadPassword();
static{
System.loadLibrary("PasswordDLL");
}
/***//**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
JNIPasswordReaderreader=newJNIPasswordReader();
Stringpwd=reader.readPassword();
System.out.println("
YourPasswordis:"+pwd);
}

}
这一段利用System.loadLiberary("..");来加载当地类库,PasswordDLL是文件名,不必要加dll后缀,体系会主动识别。
编译成JNIPasswordReader.class今后,利用
javah-jniJNIPasswordReader
命令,天生一个JNIPasswordReader.h文件,文件内容以下:

/**//*DONOTEDITTHISFILE-itismachinegenerated*/
#include<jni.h>
/**//*HeaderforclassJNIPasswordReader*/

#ifndef_Included_JNIPasswordReader
#define_Included_JNIPasswordReader
#ifdef__cplusplus
extern"C"{
#endif
/**//*
*Class:JNIPasswordReader
*Method:readPassword
*Signature:()Ljava/lang/String;
*/
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword
(JNIEnv*,jobject);#ifdef__cplusplus
}
#endif
#endif

然后,我们必要写一个cpp文件来完成
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword(JNIEnv*,jobject);
接口。
因而,我写了一个PasswordDLL.cpp文件,内容以下:

//这是主DLL文件。
#include"stdafx.h"
#include"JNIPasswordReader.h"
#include<iostream>
#include<iomanip>
#include<conio.h>
usingnamespacestd;/**//*
*Class:JNIPasswordReader
*Method:readPassword
*Signature:()V
*/
JNIEXPORTjstringJNICALLJava_JNIPasswordReader_readPassword
(JNIEnv*env,jobject){
charstr[20]={0};
jstringjstr;
charch;
char*pstr=str;
while(true)
{
ch=getch();
if(isdigit(ch)||isalpha(ch))
{
cout<<"*";
*pstr++=ch;
}
elseif(ch==&&pstr>str)
{
*(--pstr)=0;
cout<<"";
}
elseif(ch==0x0A||ch==0x0D)
{
break;
}
}
jstr=env->NewStringUTF(str);
returnjstr;

我利用VS2005来天生对应的dll文件,在天生之前,必要把$JDK_HOME/include/jni.h和$JDK_HOME/include/win32/jni_md.h这两个文件copy到MicrosoftVisioStudio8/VC/include目次下,我就在这里卡了也许1个小时,一向说找不到jni.h文件然后就能够利用VS2005来天生dll了,天生好对应的PasswordDLL.dll今后,把该dll文件放到体系变量PATH能找到的中央,好比windows/system32/大概jdk/bin目次,我是放到JDK_HOME/bin上面了
放好今后,
实行javaJNIPasswordReader
就能够输出暗码了。
关于JNI的更具体内容,能够参考:
《在Windows中完成Java当地办法》http://www.ckuyun.com/developerworks/cn/java/jnimthds/index.html
我的Password.dll文件
http://www.blogjava.net/Files/richardeee/PasswordDLL.zip

通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-21 10:19:16 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
海妖 该用户已被删除
板凳
发表于 2015-1-30 14:55:27 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
变相怪杰 该用户已被删除
地板
发表于 2015-1-31 21:51:21 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
分手快乐 该用户已被删除
5#
发表于 2015-2-1 10:18:19 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
兰色精灵 该用户已被删除
6#
发表于 2015-2-2 11:34:37 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
莫相离 该用户已被删除
7#
发表于 2015-2-6 04:19:41 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
只想知道 该用户已被删除
8#
发表于 2015-2-11 07:02:38 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
再见西城 该用户已被删除
9#
 楼主| 发表于 2015-2-25 06:23:50 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
山那边是海 该用户已被删除
10#
发表于 2015-3-7 17:21:10 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
深爱那片海 该用户已被删除
11#
发表于 2015-3-15 07:43:21 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
金色的骷髅 该用户已被删除
12#
发表于 2015-3-15 13:43:10 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
第二个灵魂 该用户已被删除
13#
发表于 2015-3-17 23:11:27 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
蒙在股里 该用户已被删除
14#
发表于 2015-3-22 03:09:12 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
小魔女 该用户已被删除
15#
发表于 2015-3-27 16:08:31 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
飘灵儿 该用户已被删除
16#
发表于 2015-4-1 17:11:18 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
admin 该用户已被删除
17#
发表于 2015-4-1 18:10:16 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
乐观 该用户已被删除
18#
发表于 2015-4-1 20:18:22 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
灵魂腐蚀 该用户已被删除
19#
发表于 2015-5-4 10:36:03 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
爱飞 该用户已被删除
20#
发表于 2015-5-6 15:12:07 | 只看该作者
是一种使用者不需花费很多时间学习的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-18 23:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表