一个DLL的两种破解方法

一个DLL的两种破解方法
一个DLL的两种破解方法

一个DLL的两种破解方法

BigInt.dll包含一个很好用的大整数类。喜欢密码学的朋友可以方便地调用这个DLL来实现一些密码学算法。不过它是需要注册的——未注册用户在调用DLL中的某些函数时会随机地出现NAG窗口(提示注册)。

本人经过深入分析,终于破解了这个DLL。我从中也学到了不少知识。现把破解过程写出来与大家分享。

1.暴力破解

作者提供了DLL使用的示例代码。在VC6下可以直接编译通过。运行编译后的程序,发现:在单击Button1时,会随机地出现NAG窗口。在CMyDlg::OnButton1()开始的地方设置断点,VC6 Debug模式下单步跟踪。发现在执行代码cB3=cB1*cB2; 和cB3.GetBreakString(3, sz);时会出现NAG窗口(因为是随机出现的,所以一次测试可能不出现,多试几次就会发现了)。记下代码相应的虚拟地址(VC调试状态下切换到反汇编窗口,就可以看到虚拟地址了)。(另一种定位关键代码的方法是:在OD中对MessageBoxA下断)

下面使用OD来调试分析DLL中的关键代码。在分析完多个DLL的导出函数后,发现:DLL内有一个全局的CRand对象(本文将其命名为CRand_obj),该对象的成员变量m_dSeed 控制NAG窗口的出现。

内存中的CRand_obj

10021918 1001A380 offset BigInt.CRand::`vftable'

1002191C 00000000 ;填充4字节

10021920 FA8CAA01 ;m_dSeed

10021924 3FD0F698

(说明:由于字节对齐的因素,CRand_obj实际占用16个字节,偏移0x0处是虚表指针,偏移0x8处是m_dSeed。关于字节对齐,可以参考

https://www.360docs.net/doc/6f3569393.html,/zhengjinfeng/blog/item/b3b6f5ed962874312797917d.html)

在DLL的部分导出函数中会调用double CRand::GetRand(),该函数的代码如下:

10007710 BigInt.CRand::GetRand fld qword ptr ds:[1001A490] ; 1.0

10007716 fsub qword ptr ds:[ecx+8]

10007719 fmul qword ptr ds:[ecx+8]

1000771C fmul qword ptr ds:[1001A488] ; 4.0

10007722 fst qword ptr ds:[ecx+8]

10007725 retn

用C语言表达就是:

double CRand::GetRand()

{

m_dSeed = 4.0 * m_dSeed * (1.0-m_dSeed);

return m_dSeed;

}

/* 题外话:混沌理论

)1(41n n n x x x -=+

由初始值)1,0(0∈x 开始迭代,得到序列,...,...,,210n x x x x 是无规则的。由该序列所统计出的概率密度)(x ρ在区间(0,1)上分布为)(x ρ=)

1(1x x -π,图象如下:

*/

然后,将函数double CRand::GetRand()返回的浮点值(即当前的m_dSeed )与0.5进行比较。如果大于或等于0.5,则弹出NAG 窗口。

如果爆破的话,一种简单的想法是修改条件跳转指令。但是,在DLL 中这样的跳转指令有很多,逐个修改会很麻烦。这里使用另一种方法——修改与返回值比较的浮点数0.5。由于double CRand::GetRand()的返回值总是在0到1之间,这样只需要将0.5修改为1.0或者更大的数即可。

具体做法如下:

(1)将虚拟地址0x10001A428转换为文件偏移为0x1A428。

(2)使用16进制工具定位到DLL文件偏移0x1A428处,该处的8个字节为

00 00 00 00 00 00 E0 3F(表示浮点数0.5),

将其修改为

00 00 00 00 00 00 F0 3F(表示浮点数1.0),即只需要将E0修改为F0。

2.写注册机

爆破后的DLL已经可以自由使用。下面来分析该DLL的注册算法。按照提示,DLL使用16字节的注册码进行注册,注册函数为BOOL BigInt_Register(LPSTR pszRegCode)。

BigInt_Register的部分反汇编代码如下:

10001183 call BigInt.10008CC0 ; 初始化结构体变量C_AES_obj 10001188 lea eax,dword ptr ss:[esp+8]

1000118C push 10

1000118E push eax

1000118F lea ecx,dword ptr ss:[esp+40]

10001193 mov dword ptr ss:[esp+298],0

1000119E call BigInt.10008E70 ; 密钥扩展

100011A3 lea ecx,dword ptr ss:[esp+38]

100011A7 call BigInt.10008FB0

100011AC lea ecx,dword ptr ss:[esp+18]

100011B0 push 10

100011B2 lea edx,dword ptr ss:[esp+2C]

100011B6 push ecx

100011B7 push edx

100011B8 lea ecx,dword ptr ss:[esp+44]

100011BC call BigInt.10008FC0 ; AES-128加密

100011C1 mov ecx,4

100011C6 lea edi,dword ptr ss:[esp+18]

100011CA mov esi,offset

;str2 = byte[16],虚拟地址为100217D8,

;内容为17 39 9B 1B CA 08 2F A2 B5 F3 25 24 8C E5 ED 99

100011CF xor eax,eax

100011D1 repe cmps dword ptr es:[edi],dword ptr ds:[esi]

100011D3 je short BigInt.10001202

100011D5 lea ecx,dword ptr ss:[esp+38] ; 注册失败

100011D9 mov dword ptr ss:[esp+290],-1

100011E4 call BigInt.10008D30

100011E9 pop edi

100011EA xor eax,eax

100011EC pop esi

100011ED mov ecx,dword ptr ss:[esp+280]

100011F4 mov dword ptr fs:[0],ecx

100011FB add esp,28C

10001201 retn

10001202 mov ecx,dword ptr ss:[esp+1C] ; 注册成功

10001206 mov eax,dword ptr ss:[esp+18]

1000120A mov edx,dword ptr ss:[esp+20]

1000120E mov esi,dword ptr ss:[esp+24]

(只需要识别出算法是AES即可,AES的具体实现不必详细跟踪)

结构体变量C_AES_obj定义在栈中,其定义为

struct C_AES

{

0x0 vtable ptr32 虚表指针

0x4 s_box byte [256] AES的s盒

0x238 Nr dword 加密轮数Nr=0xA

0x23C key ptr32 指向加密密钥=”zxf80531goodluck”

0x248 e_key ptr32 指向扩展密钥

}

DLL验证注册码的算法为:

AES_Encrypt(Serial, key=”zxf80531goodluck”) == str2 ?

其中str2 是大小为16的字节数组,位于虚拟地址100217D8,

内容为17 39 9B 1B CA 08 2F A2 B5 F3 25 24 8C E5 ED 99。

显然,Serial = AES_Decrypt(str2, key=”zxf80531goodluck”)。

计算得Serial=” MayGodBlessYouHa”。

可见,注册码是唯一的。

需要注意的是:一般共享软件在注册成功后会将注册信息保存起来,下次启动时只需检查保存的信息即可。这个DLL有些另类——注册后并不保存信息。因此在每次使用该DLL前,都必须调用BigInt_Register注册。

asdfslw 于2010-5-12

【版权声明】本文由asdfslw原创于看雪软件安全论坛,转载请注明出处,并保留版权声明。

Java多线程习题

Java 多线程习题 知识点: Java 的多线程,实现多线程的两种方法,线程控制、调度方法 一、选择题 1、什么原因可导致线程停止执行。 ( ) A. 线程调用了wait()方法; B. 线程调用了yield()方法; C. 线程调用了pause()方法; D. 线程调用了sleep() 方法。 2、哪个方法是实现Runnable 接口所需的? A. wait() B . run() C . stop() D . update() E . resume() 3、以下代码的调试结果为?( ) public class Bground extends Thread{ public static void main(String argv[]){ Bground b = new Bground(); b.run(); } public void start(){ for (int i = 0; i <10; i++){ System.out.println("Value of i = " + i); } } } A. 编译错误,没有定义线程的run方法; B. 由于没有定义线程的run方法,而出现运行错误; C. 编译通过,运行输出values 0 to 9 D. 编译通过,运行无输出 4、有关线程的叙述正确的有: ( ) A. 通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定。 B. 可以获得对任何对象的互斥锁定。 C. 线程通过调用对象的synchronized 方法可取得对象的互斥锁定。 D. 线程调度算法是平台独立的。 5、以下哪个是线程类的方法? A. yield() B. sleep(long msec) C. go() D. stop() 6、以下哪个最准确描述synchronized 关键字?

java多线程试题答案

多线程 一.选择题 1.下列说法中错误地一项是() A.线程就是程序.线程是一个程序地单个执行流 B.多线程是指一个程序地多个执行流.多线程用于实现并发 2.下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态() A.等待阴塞状态下地线程被()唤 B.等待阻塞状态下地纯种被()中断 C.等待时间到 D.等待阻塞状态下地线程调用()方法 3.下列哪个方法可以使线程从运行状态进入其他阻塞状态() A. 4.下列说法中错误地一项是() A.一个线程是一个类地实例 B.线程从传递给纯种地实例()方法开始执行 C.线程操作地数据来自实例 D.新建地线程调用()方法就能立即进入运行状态 5.下列关于类提供地线程控制方法地说法中,错误地一项是() A.在线程中执行线程地()方法,则线程等待直到执行完成 B.线程通过调用()方法来中断其阻塞状态 C.若线程调用方法()返回值为,则说明正在执行中 D.()方法返回当前线程地引用 6.下列说法中,错误地一项是() A.对象锁在()语句执行完之后由持有它地线程返还 B.对象锁在()语句中出现异常时由持有它地线程返还 C.当持有锁地线程调用了该对象地()方法时,线程将释放其持有地锁 D.当持有锁地线程调用了该对象地构造方法时,线程将释放其持有地锁 7.下面地哪一个关键字通常用来对对象地加锁,从而使得对对象地访问是排他地 A. 二.填空题 . 在操作系统中,被称做轻型地进程是线程 . 多线程程序设计地含义是可以将一个程序任务分成几个并行地任务 . 在程序中,()方法地实现有两种方式:实现接口和继承类.多个线程并发执行时,各个线程中语句地执行顺序是确定地,但是线程之间地相对执行顺序是不确定地 中地对象锁是一种独占地排他锁 .程序中可能出现一种情况:多个线种互相等待对方持有地锁,而在得到对方地锁之前都不会释放自己地锁,这就是死锁b5E2R。 .线程地优先级是在类地常数和之间地一个值 .处于新建状态地线程可以使用地控制方法是()和(). .一个进程可以包含多个线程 三.简答题

破解excel保护密码的宏代码

Option Explicit Public Sub AllInternalPasswords() ' Breaks worksheet and workbook structure passwords. Bob McCormick ' probably originator of base code algorithm modified for coverage ' of workbook structure / windows passwords and for multiple passwords ' ' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1) ' Modified 2003-Apr-04 by JEM: All msgs to constants, and ' eliminate one Exit Sub (Version 1.1.1) ' Reveals hashed passwords NOT original passwords Const DBLSPACE As String = vbNewLine & vbNewLine Const AUTHORS As String = DBLSPACE & vbNewLine & _ "Adapted from Bob McCormick base code by" & _ "Norman Harker and JE McGimpsey" Const HEADER As String = "AllInternalPasswords User Message" Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04" Const REPBACK As String = DBLSPACE & "Please report failure " & _ "to the microsoft.public.excel.programming newsgroup." Const ALLCLEAR As String = DBLSPACE & "The workbook should " & _ "now be free of all password protection, so make sure you:" & _ DBLSPACE & "SAVE IT NOW!" & DBLSPACE & "and also" & _ DBLSPACE & "BACKUP!, BACKUP!!, BACKUP!!!" & _ DBLSPACE & "Also, remember that the password was " & _ "put there for a reason. Don't stuff up crucial formulas " & _ "or data." & DBLSPACE & "Access and use of some data " & _ "may be an offense. If in doubt, don't." Const MSGNOPWORDS1 As String = "There were no passwords on " & _ "sheets, or workbook structure or windows." & AUTHORS & VERSION Const MSGNOPWORDS2 As String = "There was no protection to " & _ "workbook structure or windows." & DBLSPACE & _ "Proceeding to unprotect sheets." & AUTHORS & VERSION Const MSGTAKETIME As String = "After pressing OK button this " & _ "will take some time." & DBLSPACE & "Amount of time " & _ "depends on how many different passwords, the " & _ "passwords, and your computer's specification." & DBLSPACE & _ "Just be patient! Make me a coffee!" & AUTHORS & VERSION Const MSGPWORDFOUND1 As String = "You had a Worksheet " & _ "Structure or Windows Password set." & DBLSPACE & _ "The password found was: " & DBLSPACE & "$$" & DBLSPACE & _ "Note it down for potential future use in other workbooks by " & _ "the same person who set this password." & DBLSPACE & _ "Now to check and clear other passwords." & AUTHORS & VERSION Const MSGPWORDFOUND2 As String = "You had a Worksheet " & _ "password set." & DBLSPACE & "The password found was: " & _

医疗云解决方案

医疗云解决方案 篇一:医院医疗影像云解决方案 医院医疗影像云解决方案 关键字: 医院、医疗、影像云、云计算、云存储一、 业务场景 医院医疗影像云解决方案 为改变目前医院医疗影像为院内建设模式,把影像数据托管至云平台上,从而实现医疗影像的跨院、跨区域、跨个人以及更方便的电子化数据的互通与共享。 二、 客户需求分析 医院影像数据需要安全保存,实现异地冗余灾备。跨院区影像需要集中存储,影像共享。 1、 2、三、 解决方案 1、 整体架构 医疗影像云平台由上海基地负责影像云平台开发、PACS系统集成开发、影像应用产品迭代开发。影像云的业务采用集中式的部署及管理,同时系统平台采用分布式架构,以实现负载均衡。 下图是整体业务逻辑架构:

中国电信上海公司总师室 医院 医疗影像云解决方案 其中,院内的影像数据可以通过MPLS-VPN方式,通过前置机传输至影像云中心;同样,云中心亦可以通过MPLS-VPN方式把归档好的影像数据回传至院内PACS;当客户使用影像云诊断及应用工具时,则可以采用更为便捷的互联网方式进行随时随地的快速调阅和应用。可以采用专线以及互联网的方式替代MPLS-VPN方式。 2、 医院侧前端部署架构 医院前置机部署于医院侧,是连接医院系统/设备和云存储中心系统的桥梁,只要遵循协议标准的影像设备如DR,CT等以及院内PACS系统都可以接入云归档系统。 该前置主要实现功能如下: ? 根据Dicom标准协议从医院PACS系统或放射设备上获取影像信息; ? 根据Dicom标准协议从云端将归档影像信息传送到医院PACS系统或 中国电信上海公司总师室 设备; 医院医疗影像云解决方案

云平台数据安全

云平台数据安全学习报告 广东省经济和信息化委员会在中山市档案信息中心大楼召开2015年全省电子政务云平台现场会。 会议总结推广以信息安全为核心、实现资源集约化利用和互联共享的电子政务云平台建设经验,研究部署下阶段全省电子政务云平台建设工作。介绍了广州市和中山市电子政务云服务的建设情况。 针对目前广州市电子政务工作中存在重复建设、资源浪费、信息孤岛、安全薄弱等问题,市府办近日通过《关于推进政府大数据平台建设的实施意见》,推进全市一体化的政府大数据平台建设,实现全市“一朵云”架构。 各县(市、区)原则上不再单独建设云平台,统一纳入全市一体化政务云服务体系。从今年11月份开始,各部门新建的或升级改造的电子政务应用系统,原则上均应部署在云平台上,市级各部门网站以及目前已托管的应用系统,2015 年底前首先迁移到云平台。 广州市各个政府档位都不能构建新的数据中心 《关于推进政府大数据平台建设的实施意见》规定,实施的基本原则包括基础设施统一化建设、数据资源集中化管理、技术服务社会化保障。其中,基础设施建设方面,根据电子政务、智慧城市、信息惠民等信息化建设需求,建设全市“一朵云”架构。云服务模式将按照“以上云为常态,不上云为例外”要求,让各地、各部门利用统一政务云平台开展电子政务应用,除特殊原因外,各部门原则上不再新建独立的机房、数据中心和专用网络,不另行采购服务器、存储、数据库、支撑软件、信息安全、数据备份等基础设施。 数据资源管理方面,建立健全以政府大数据平台为核心的信息资源归集、共享、开放和安全保障机制,各部门数据要向大数据平台集中,统一为各级各部门提供共享服务。除法律法规明确规定外,对申请立项新建的部门信息系统,只要是未明确部门间信息共享需求的,一概不予审批;对在建的部门信息系统,只要是不能与其他部门互联共享信息的,一概不得通过验收;只要是不支持统一信息共享平台建设、不向统一信息共享平台提供信息的部门信息系统,一概不予审批或验收。 技术服务保障方面,发挥市场机构在信息基础设施建设、信息技术、信息资

第5章-多线程-补充案例

第五章补充案例 案例5-1继承Thread类创建多线程 一、案例描述 1、考核知识点 编号:00105002 名称:继承Thread类创建多线程 2、练习目标 ?掌握如何通过继承Thread类实现多线程的创建。 ?掌握Thread类中run()方法和start()方法的使用。 3、需求分析 在程序开发中,会遇到一个功能需要多个线程同时执行才能完成的情况。这时,可以通过继承线程类Thread,并重写Thread类中的run()方法来实现。为了让初学者熟悉如何创建多线程,在案例中将通过继承Thread类方式创建线程,并实现多线程分别打印0~99的数字的功能。 4、设计思路(实现原理) 1)自定义一个类Demo,使其继承Thread类。 2)在Demo类中重写run()方法,在run()方法内编写一个for循环,循环体内打印:“Demo:” +当前循环次数。 3)编写测试类Example01,在Example01类的main()方法中,创建一个Demo对象,并执 行其start()方法,接着编写一个for循环,循环体内打印:“main:”+当前循环次数。

二、案例实现 class Demo extends Thread { public void run() { for (int x = 0; x < 100; x++) { System.out.println("Demo:"+x); } } } public class Example01{ public static void main(String[] args) { Demo d = new Demo(); d.start(); for(int x=0; x<100; x++){ System.out.println("main:"+x); } } } 运行结果如图5-1所示。 图5-1运行结果 三、案例总结 1、通过继承Thread类,并重写Thread类中的run()方法可以实现多线程。 2、Thread类中,提供的start()方法用于启动新线程,线程启动后,系统会自动调用run()方法。 3、main()方法中有一条主线程在运行。

多线程练习题目

多线程练习题目

————————————————————————————————作者:————————————————————————————————日期:

多线程? 一、单项 1.下述哪个选项为真?() A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D.任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public classXimplements Runable{ publicvoid run() {……}} B.public class XimplementsThread { public void run(){……} } C. public class X implements Thread { public int run() {……} } D.publicclass X implements Runable { protectedvoidrun(){……}} 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是() A.resume()方法 B.wait()方法 C.suspend()方法D.notify()方法 7.运行下列程序,会产生的结果是( ) publicclassXextends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } publicstaticvoid main(String[] args) { Thread t=new Thread(newX()); t.start();

破解EXCEL宏密码

如何破解excel宏的保护密码 第一步:打开该文件,先解除默认的“宏禁用”状态,方法是点击工具栏下的“选项”状态按钮,打开“Microsoft Office安全选项”窗口,选择其中的“启用此内容”,“确定”退出; 再切换到“视图”选项卡,点击“宏”→“录制宏”,出现“录制新宏”窗口,在“宏名”定义一个名称为:PasswordBreaker(图3),点击“确定”退出;

第二步:再点击“宏”→“查看宏”,选择“宏名”下的“PasswordBrea ker”并点击“编辑”,打开“MicrosoftVisual Basic”编辑器,用如下内容替换右侧窗口中的所有代码: Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n As Integer Dim i1 As Integer, i2 As Integer, i3 As Integer Dim i4 As Integer, i5 As Integer, i6 As Integer On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _ Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) If ActiveSheet.ProtectContents = False Then MsgBox "One usable password is " & Chr(i) & Chr(j) & _ Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) ActiveWorkbook.Sheets(1).Select Range("a1").FormulaR1C1 = Chr(i) & Chr(j) & _

云环境下医疗大数据隐私安全风险评估

云环境下医疗大数据隐私安全风险评估 由于云计算、大数据等技术的迅猛发展,带动了各行各业的发展,医疗大数据的研究也势不可挡。在我国,研究医疗大数据正式纳入国家发展战略。随着医疗数据量的快速增长与融合,一方面大数据能够提高医疗诊断的准确性,促进医疗事业的发展,另一方面能提供更多的就业机会,进而增加社会效益。但是,随着医疗信息的共享,医疗数据量的增大,隐私安全风险事件频发,医疗大数据的隐私安全面临着重大的挑战。 云平台能够有效的存储医疗大数据,医疗大数据采用云服务是有必要的。此时用户已经掌控不了云环境下的医疗大数据的应用,用户的隐私难以得到保障,所以研究云环境下的医疗大数据是必要的。哪些风险因素影响了云环境下医疗大数据的隐私安全?如何对云环境下医疗大数据隐私安全风险进行评估?又是如何对隐私安全进行保护的?现有医疗大数据隐私安全风险研究非常匮乏,解决这些问题对云环境下医疗大数据的隐私安全十分重要。本论文对云环境下医疗大数据隐私安全风险作了系统的研究。 通过查找文献资料,从医疗大数据的生命周期出发,梳理凝练出医疗大数据采集、存储、应用以及销毁整个生命周期中的若干隐私安全风险因素。再通过对相关学者、专家的咨询,确定了29个隐私安全风险因素。根据梳理出的隐私安全风险因素建立指标体系,为建立隐私安全风险度量评估模型奠定基础。风险与不确定性和损失影响有关,论文通过信息熵、模糊集、马尔科夫链和贝叶斯网络建立了一个多元融合的隐私安全风险评估模型,并且利用信息熵能有效的降低主观估计的弊端,采用马尔科夫链能够求出每个阶段风险发生的稳态概率。 在测试实验分析中,通过对各隐私安全风险因素的威胁频率、资产重要程度、利用脆弱性程度以及脆弱性的严重程度四个方面进行评估打分,能够从风险的不确定性、风险等级、风险发生概率三个方面评估隐私安全风险。最后,深入探究医疗大数据生命周期的各个环节中关系隐私安全风险的技术因素,在分析影响医疗大数据在采集、存储、应用以及销毁过程中的隐私安全风险因素的基础上,给出一个基于技术因素与管理措施的隐私保护设想。通过测试实验分析比较,能够发现云环境下医疗大数据的生命周期的四个阶段中,数据应用阶段发生隐私安全风险的稳态概率最高,说明数据应用阶段的隐私安全风险是最容易发生的,该阶

多线程练习题目

多线程 一、单项 1.下述哪个选项为真?( ) A.Error类是一个RoutimeException异常 B.任何抛出一个RoutimeException异常的语句必须包含在try块之内 C.任何抛出一个Error对象的语句必须包含在try块之内 D. 任何抛出一个Exception异常的语句必须包含在try块之内 2.下列关于Java线程的说法哪些是正确的?( ) A.每一个Java线程可以看成由代码、一个真实的CPU以及数据3部分组成 B.创建线程的两种方法,从Thread类中继承的创建方式可以防止出现多父类问题 C.Thread类属于java.util程序包 D.以上说法无一正确 3.哪个关键字可以对对象加互斥锁?( ) A.transient B.synchronized C.serialize D.static 4.下列哪个方法可用于创建一个可运行的类?() A.public class X implements Runable { public void run() {……} } B. public class X implements Thread { public void run() {……} } C. public class X implements Thread { public int run() {……} } D.public class X implements Runable { protected void run() {……} } 5.下面哪个选项不会直接引起线程停止执行?( ) A.从一个同步语句块中退出来 B.调用一个对象的wait方法 C.调用一个输入流对象的read方法 D.调用一个线程对象的setPriority方法 6.使当前线程进入阻塞状态,直到被唤醒的方法是( ) A.resume()方法 B.wait()方法 C.suspend()方法 D.notify()方法 7.运行下列程序,会产生的结果是( ) public class X extends Thread implements Runnable { public void run(){ System.out.println(“this is run()”); } public static void main(String[] args) { Thread t=new Thread(new X()); t.start(); } }

Java创建线程的两种方式以及区别

由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和(1)结果大同小异。均是各自线程对自己的100张票进行单独的处理,互不影响。 可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。 由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和例4.2.1的结果大同小异。均是各自线程对自己的100张票进行单独的处理,互不影响。 可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的。因为这两种方式创建的多线程程序能够实现相同的功能。

结果正如前面分析的那样,程序在内存中仅创建了一个资源,而新建的三个线程都是基于访问这同一资源的,并且由于每个线程上所运行的是相同的代码,因此它们执行的功能也是相同的。

可见,如果现实问题中要求必须创建多个线程来执行同一任务,而且这多个线程之间还将共享同一个资源,那么就可以使用实现Runnable接口的方式来创建多线程程序。而这一功能通过扩展Thread类是无法实现的,读者想想看,为什么? 实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。

30秒破解EXCEL密码

30秒破解EXCEL密码 1\打开文件 2\工具---宏----录制新宏---输入名字如:aa 3\停止录制(这样得到一个空宏) 4\工具---宏----宏,选aa,点编辑按钮 5\删除窗口中的所有字符(只有几个),替换为下面的内容:(复制吧) 6\关闭编辑窗口 7\工具---宏-----宏,选AllInternalPasswords,运行,确定两次,等2分钟,再确定.OK,没有密码了!! 内容如下: Public Sub AllInternalPasswords() ' Breaks worksheet and workbook structure passwords. Bob McCormick ' probably originator of base code algorithm modified for coverage ' of workbook structure / windows passwords and for multiple passwords ' ' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1) ' Modified 2003-Apr-04 by JEM: All msgs to constants, and ' eliminate one Exit Sub (Version 1.1.1) ' Reveals hashed passwords NOT original passwords Const DBLSPACE As String = vbNewLine & vbNewLine Const AUTHORS As String = DBLSPACE & vbNewLine & _ "Adapted from Bob McCormick base code by" & _ "Norman Harker and JE McGimpsey" Const HEADER As String = "AllInternalPasswords User Message" Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04" Const REPBACK As String = DBLSPACE & "Please report failure " & _ "to the microsoft.public.excel.programming newsgroup." Const ALLCLEAR As String = DBLSPACE & "The workbook should " & _ "now be free of all password protection, so make sure you:" & _ DBLSPACE & "SAVE IT NOW!" & DBLSPACE & "and also" & _ DBLSPACE & "BACKUP!, BACKUP!!, BACKUP!!!" & _ DBLSPACE & "Also, remember that the password was " & _ "put there for a reason. Don't stuff up crucial formulas " & _ "or data." & DBLSPACE & "Access and use of some data " & _ "may be an offense. If in doubt, don't." Const MSGNOPWORDS1 As String = "There were no passwords on " & _ "sheets, or workbook structure or windows." & AUTHORS & VERSION Const MSGNOPWORDS2 As String = "There was no protection to " & _ "workbook structure or windows." & DBLSPACE & _ "Proceeding to unprotect sheets." & AUTHORS & VERSION Const MSGTAKETIME As String = "After pressing OK button this " & _ "will take some time." & DBLSPACE & "Amount of time " & _ "depends on how many different passwords, the " & _ "passwords, and your computer's specification." & DBLSPACE & _

多线程练习题

0、Java中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。 1、解释实现多线程的几种方法? Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。还可以使用线程池。 2、Thread.start()与Thread.run()有什么区别? Thread.start()方法(native)启动线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run()方法。 3、为什么需要run()和start()方法,我们可以只用run()方法来完成任务吗? 我们需要run()&start()这两个方法是因为JVM创建一个单独的线程不同于普通方法的调用,所以这项工作由线程的start方法来完成,start由本地方法实现,需要显示地被调用,使用这俩个方法的另外一个好处是任何一个对象都可以作为线程运行,只要实现了Runn able接口,这就避免因继承了Thread类而造成的Java的多继承问题。 4、什么是ThreadLocal类,怎么使用它? ThreadLocal是一个线程级别的局部变量,并非“本地线程”。ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本,每个线程修改副本时不影响其它线程对象的副本(译者注)。 5、Sleep()、suspend()和wait()之间有什么区别? Thread.sleep()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。如果另一线程调用了interrupt()方法,它将唤醒那个“睡眠的”线程。 注意:sleep()是一个静态方法。这意味着只对当前线程有效,一个常见的错误是调用t.sl eep(),(这里的t是一个不同于当前线程的线程)。即便是执行t.sleep(),也是当前线程进入睡眠,而不是t线程。t.suspend()是过时的方法,使用suspend()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend()容易引起死锁问题。 object.wait()使当前线程出于“不可运行”状态,和sleep()不同的是wait是object的方法而不是thread。调用object.wait()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用object.notify(),这样将唤醒原来等待中的线程,然后释放该锁。基本上wait() /notify()与sleep() /interrupt()类似,只是前者需要获取对象锁。 6、在静态方法上使用同步时会发生什么事? 同步静态方法时会获取该类的“Class”对象,所以当一个线程进入同步的静态方法中时,线程监视器获取类本身的对象锁,其它线程不能进入这个类的任何静态同步方法。它不像实例方法,因为多个线程可以同时访问不同实例同步实例方法。 7、当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗?

卫生局医疗云信息安全等级保护建设方案

卫生局医疗云信息安全等级保护 建 设 方 案

目录 1项目综述 (5) 1.1 项目背景 (5) 1.2 安全目标 (5) 1.3 建设范围 (6) 1.4 建设依据 (6) 1.4.1 国家相关政策要求 (6) 1.4.2 等级保护及信息安全相关国家标准 (7) 2云安全等保风险分析 (8) 2.1 合规性风险 (11) 2.2 系统建设风险 (11) 2.2.1 应用迁入阻力风险 (12) 2.2.2 虚拟化平台品牌选择风险 (12) 2.2.3 建设质量计量、监督风险 (12) 2.2.4 安全规划风险 (12) 2.2.5 建设计划风险 (13) 2.3 安全技术风险 (14) 2.3.1 物理安全风险 (14) 2.3.2 网络安全风险 (14) 2.3.3 主机安全风险 (16) 2.3.4 应用安全风险 (17) 2.3.5 数据安全风险 (18) 2.3.6 虚拟化平台安全风险 (20) 2.3.7 虚拟化网络安全风险 (21) 2.3.8 虚拟化主机安全风险 (22) 2.3.1 安全管理风险 (23) 2.3.2 云环境下的特有安全管理风险 (23)

2.3.3 安全组织建设风险 (24) 2.3.4 人员风险 (24) 2.3.5 安全策略风险 (25) 2.3.6 安全审计风险 (25) 2.4 安全运维风险 (25) 2.4.1 云环境下的特有运维风险 (26) 2.4.2 环境与资产风险 (27) 2.4.3 操作与运维风险 (27) 2.4.4 业务连续性风险 (27) 2.4.5 监督和检查风险 (28) 2.4.6 第三方服务风险 (28) 3解决方案总体设计 (29) 3.1 设计原则 (29) 3.2 安全保障体系构成 (31) 3.2.1 安全技术体系 (32) 3.2.2 安全管理体系 (36) 3.2.3 安全运维体系 (36) 3.3 安全技术方案详细设计 (37) 3.3.1 信息安全拓扑设计 (38) 3.3.2 安全计算环境设计 (52) 3.3.3 安全区域边界设计 (64) 3.3.4 安全通信网络设计 (68) 3.3.5 安全管理中心设计 (72) 3.4 安全管理体系详细设计 (76) 3.4.1 安全管理建设设计指导思想 (76) 3.4.2 建立安全管理制度及策略体系的目的 (77) 3.4.3 设计原则 (77) 3.4.4 安全方针 (78) 3.4.5 信息安全策略框架 (78)

经典多线程的练习题

java中有几种方法可以实现一个线程(jdk5.0之前)?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 答:有两种实现方法,分别是继承Thread类与实现Runnable接口。 用synchronized关键字修饰同步方法,反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。 suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志, 指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。 sl eep() 和wait() 有什么区别? 答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

云计算在医疗行业中的网络安全防护

云计算在医疗行业中的网络安全防护 发表时间:2015-10-29T14:58:03.557Z 来源:《健康世界》2015年6期作者:贾亮 [导读] 连云港市东方医院 222042 本文就云计算在医疗行业中的网络安全防护进行了简要的探究,仅供参考。连云港市东方医院 222042 摘要:21世纪是计算机网络的时代,在这一时代中,计算机技术逐渐由科学领域进入到医疗行业中。在计算机技术的不断发展法中,云计算开始出现,云计算的应用不仅使得的医疗行业的网络实现了优化配置,而且还有效的保障了医疗行业中网络的安全,对其网络系统实现了安全防护,从而在一定程度上推动了医疗行业的发展。本文就云计算在医疗行业中的网络安全防护进行了简要的探究,仅供参考。关键词:云计算;医疗行业;网络安全防护 云计算的应用对网络中分布的数据进行了优化处理,通过云计算的利用,使得计算机PC的运行效率提高,并且对其的配置进行了优化,使得其配置的成本得到了减少。在医疗行业中应用云计算,不仅实现了医疗行业数据的高度共享,而且对医疗行业的网络安全形成了有效的防护,而目前如何在医疗行业中更好的应用云计算,对医疗行业的网络安全进行高效的防护,是现今医疗行业网络相关技术人员急需探讨的课题。 一、云计算在医疗行业中的应用优势 1.云计算实现了网络信息的集中管理和成本降低 云计算是通过将多种标准服务器进行有效的连接,从而形成的一种数据信息载体,这种技术在医疗行业中的应用,实现了医院系统资源的高度集中,从而对医疗行业的网络安全形成了一定的保护。虽然我国的云计算应用还处于初级发展阶段,但是其未来的应用前景却不可以小觑。随着云计算的发展,其对于医疗行业的网络安全将会产生更加深远的影响。一般来说,医院在发展的过程中,一直在寻找低成本高效的经营方式,而就医院的IT空间来说,云计算应用使其实现了这样的一种目的。在医院的网络安全防护体系中加入云计算技术,可以说在一定的程度上节省了医院在网络安全维护上的成本费用。 云计算通过对医院系统的有效连接,使得医院的基础设施得到了优化,在一定程度上节省了医院经营的成本,并且在运营成本降低的前提下,也提升了医院的运行效率。这种技术实现了医院各项信息资料的高度集中,通过云计算技术对医院的各项信息实行了统一的管理,从而方便了医疗行业相关人员对资料的利用,从这一方面来说,由于信息资料的高度集中,使得网络信息的安全得到了有效的保障。 2.云计算的应用实现了服务的广泛性 计算机的出现推动了社会经济的发展,使得经济市场形势出现了巨大的转变,而随着社会各行业对计算机技术的应用,我国的医疗行业为了寻求发展,也将计算机技术应用到医疗网络安全管理中。而随着计算机技术的进一步发展,其形成了云计算技术。就云计算技术在医疗行业网络安全系统中的应用来说,其不仅使得网络的资源实现了高度的集中,而且对于医疗行业的服务系统也进行了优化配置,医疗服务系统之间形成了有效的互通,实现了服务信息的交流,从而使得医疗信息实现了共享的目的。用户可以通过医疗服务系统进行相关医疗常识的阅读,从而使得医疗服务实现了广泛性。 二、云计算在医疗行业中的网络安全防护效果 1.保障了医疗网络系统的可靠性 利用云计算,可以将医疗行业中的相关技术资料以及各种集群思路统一的集中到网络服务器中,这样不仅使得医疗网络系统的服务性得到了延长,而且也提高了医疗网络系统的可靠性。而云计算在提高医疗网络系统可靠性时,实现的步骤主要包括以下几点:首先,先将一个集群网络分为TCP/IP及非TCP/IP两种网络,其中客户端与服务器之间相互通信、该问的公共网络即为TCP/IP网络,集群软件私有网络则为非TCP/IP网络。集群技术通过私有网络监控其各节点,从而取代TCP/IP的通讯路径。第二,在同一集群网络中,各节点中的TCP/IP网络以及非TCP/IP网络会持续的发送、接收KEEP-ALIVE消息,如果某个节点所持续发送的数据包丢失,就可以认定对方节点出现了问题。如果某个节点的主用网卡出现问题,其所对应的集群代理就会切换网卡,把最初的service adapter的IP地址向新的standby adapte上转移,再将standby直址向故障网卡转移,并进行网络其它节点的ARP的刷新,从而实现网卡的可靠性保证。第三,如果网络中的K-A全部丢失,则cluster就会做出该节点出现问题的判断,并进行资源接管,把共享磁盘中的资源转交由备份节点进行接管;并且发生IP地址接管和应用接管。通过上述操作步骤,可以保证服务器系统中某台设备出现问题后,或者整体出现问题后,仍然可以对外提供连续服务。 2.有效的提高了医疗系统的扩展性 随着用户对于医疗服务系统应用率的提升,相关的服务数据也在增加,而网络中的硬盘的存储空间以及拓展空间有限,无论其采用何种的方式进行硬盘的优化配置,其都会在应用的过过程中,出现扩展极限的问题。而采用云计算技术,可以实现虚拟化硬盘,而虚拟化硬盘的空间容量以及拓展性具有动态扩容的能力,其可以将各种资源有效的存储到虚拟空间中,从而避免了因存储空间不足,而使得数据无法有效存储的问题出现。 3.提高了医疗行业网络安全系统的性能 随着云计算技术的发展,其在医疗行业网络系统中的应用性能也得到了进一步的提升。医疗行业网络安全系统在长时间的应用过程中,难免会出现资源管理调度困难的问题,而这一问题的出现,不仅使得资源信息无法进行有效的利用,而且也对网络的安全造成了一定的威胁。因此在医疗行业中应用云计算技术就显得尤为必要。云计算技术的应用,使得医疗行业的网络安全系统性能得到了进一步的提升,对资源信息形成了优化配置,使得资源信息的调度变得更加科学化和系统化。云计算利用其较强的任务分配能力,在网络安全系统中加入了调度功能,这种功能的设定,使得任务的调度可以按照特定的算法进行合理的分配,有效的提高了医疗网络安全系统的工作效率。另外,云计算技术的应用,使得每个医疗服务器上都建立了一个相应的LOCK,这种概念的设定,使得资源的分配变得更加的合理,从而有效防止了资源信息之间的冲突,从而对医疗网络安全形成了有效的防护。 三、结语 综上所述,云计算是计算机技术发展的必然产物。云计算在医疗行业中得到了广发的应用,由于云计算所具有的诸多应用优势,使得其对医疗行业的网络安全形成了有效的防护,不仅使得医疗行业的网络安全系统的可靠性得到了提高,而且也使得系统的拓展性以及性能都得到了提高,从而实现了信息资源的统一安全管理,这对于我国医疗行业的发展具有积极的帮助作用。

相关文档
最新文档