Hacking Respondus LockDown Browser

有个Online Course的网上测评只能用LockDown Browser这个浏览器,灰常牛逼,禁用了所有的快捷键,禁用了任务管理器,禁用了alt-tab,禁止在虚拟机里(包括VM Ware,Virtual PC……)运行,反正我能想到的办法都被它禁掉了╮(╯▽╰)╭


由于Ohio State University使用了这个网上测评的系统,有OSU的学生就在吐槽说这浏览器特么的不就是个病毒么。


看到帖子说可以用Notepad打开LockDown.exe,我一想我电脑里不是有更强大的UltraEdit嘛,就打开来看了一下。


让我感到疑惑的是,网上所有的帖子都说这个软件的机制是禁用了它的blacklist上所有的程序,但根据我观察到的情况,我倒觉得它用的是whitelist,即只允许出现在它列表中的那些进程 (系统进程等),否则一律要求用户kill。可能那些帖子太老了吧,最近这个浏览器update过了。


最奇怪的是,在该可执行文件中,出现了AutoHotKey字符串,就说明程序的作者意识到了AHK的存在,但缘于何种原因他没有要求用户禁止AutoHotKey.exe,就不得而知了。因为为了破除该软件的限制,我们用到的工具正是AutoHotKey


运行程序的命令需要用到AHK自带的Window Spy小工具,因为需要用这个工具查看需要运行的程序的名字(在AHK里的名字)。


主要参考了这个脚本,在它的基础上做了不少修改。


另外,截屏这个功能参考了这个帖子(我直接copy & paste了CaptureScreen这个函数)。


原来国外竟有这么多人在研究AHK,我觉得还蛮惊讶的;也很好奇为何这个简单轻便的小工具有这么大的魅力,能吸引到这么多人在论坛上讨论。


Talk is  cheap. Show me the code.

下面是我的脚本:


Run, C:\Program Files (x86)\Respondus LockDown Browser\LockDown.exe


WinWait, Respondus LockDown Browser
WinSet, AlwaysOnTop, Off, Respondus LockDown Browser
WinSet, Enable, , Respondus LockDown Browser


Gui -MinimizeBox
Gui, Add, Button, default, &Run Chrome
Gui, Add, Button, default, &Show Chrome
Gui, Add, Button, default, &Run Explorer
Gui, Add, Button, default, &Show Foxit Reader
Gui, Add, Button, default, &Screen Shot
Gui, Show,, Subversion Menu


WinSet, AlwaysOnTop, On, Subversion Menu
return


ButtonRunIE:
Run, IEXPLORE.EXE
return


ButtonRunChrome:
Run, chrome.EXE
return


ButtonShowChrome:
WinActivate, ahk_class Chrome_WidgetWin_1
return


ButtonVisitAllWindows:
WinGet, id, list,,, Program Manager
Loop, %id%
{
    this_id := id%A_Index%
    WinActivate, ahk_id %this_id%
    WinGetClass, this_class, ahk_id %this_id%
    WinGetTitle, this_title, ahk_id %this_id%
    MsgBox, 4, , Visiting All Windows`n%a_index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n`nContinue?
    IfMsgBox, NO, break
}
return


ButtonRunExplorer:
Run, explore
return


ButtonShowExplorer:
WinActivate, ahk_class CabinetWClass
return


ButtonShowFoxitReader:
WinActivate, ahk_class classFoxitReader
return


ButtonScreenShot:
counter++
count = 000%counter%
stringright, count, count, 4
imagesavename=C:\test%count%.bmp
; call the screencapture function
CaptureScreen(0,false,imagesavename)
Return
return


; Drag to move the Gui
uiMove:
PostMessage, 0xA1, 2,,, A 
Return


;############# RegionCapture Code is below ########################################################
/* CaptureScreen(aRect, bCursor, sFileTo)
1) If the optional parameter bCursor is True, captures the cursor too.
2) If the optional parameter sFileTo is 0, set the image to Clipboard.
   If it is omitted or "", saves to screen.bmp in the script folder,
   otherwise to sFileTo which can be BMP/JPG/PNG/GIF/TIF.
3) If aRect is 0/1/2, captures the screen/active window/client area of active window.
4) aRect can be comma delimited sequence of coordinates, e.g., "Left, Top, Right, Bottom" or "Left, Top, Right, Bottom, Width_Zoomed, Height_Zoomed".
   In this case, only that portion of the rectangle will be captured. Additionally, in the latter case, zoomed to the new width/height, Width_Zoomed/Height_Zoomed.
Build date is 20-12-2007
Example:
CaptureScreen(0)
CaptureScreen(1)
CaptureScreen(2)
CaptureScreen("100, 100, 200, 200")
CaptureScreen("100, 100, 200, 200, 400, 400")   ; Zoomed
*/


/* Convert(sFileFr, sFileTo)
Convert("C:\image.bmp", "C:\image.jpg")
Convert(0, "C:\clip.png")   ; Save the bitmap in the clipboard to sFileTo if sFileFr is "" or 0.
*/
CaptureScreen(aRect = 0, bCursor = False, sFile = "")
{
If !aRect
{
SysGet, Mon, Monitor, 1
nL := MonLeft
nT := MonTop
nW := MonRight - MonLeft
nH := MonBottom - MonTop
}
Else If aRect = 1
WinGetPos, nL, nT, nW, nH, A
Else If aRect = 2
{
WinGet, hWnd, ID, A
VarSetCapacity(rt, 16, 0)
DllCall("GetClientRect" , "Uint", hWnd, "Uint", &rt)
DllCall("ClientToScreen", "Uint", hWnd, "Uint", &rt)
nL := NumGet(rt, 0, "int")
nT := NumGet(rt, 4, "int")
nW := NumGet(rt, 8)
nH := NumGet(rt,12)
}
Else
{
StringSplit, rt, aRect, `,, %A_Space%%A_Tab%
nL := rt1
nT := rt2
nW := rt3 - rt1
nH := rt4 - rt2
znW := rt5
znH := rt6
}


hDC := DllCall("GetDC", "Uint", 0)
mDC := DllCall("CreateCompatibleDC", "Uint", hDC)
hBM := DllCall("CreateCompatibleBitmap", "Uint", hDC, "int", nW, "int", nH)
oBM := DllCall("SelectObject", "Uint", mDC, "Uint", hBM)
DllCall("BitBlt", "Uint", mDC, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", hDC, "int", nL, "int", nT, "Uint", 0x40000000 | 0x00CC0020)
If bCursor
CaptureCursor(mDC, nL, nT)
DllCall("SelectObject", "Uint", mDC, "Uint", oBM)
DllCall("DeleteDC", "Uint", mDC)
If znW && znH
hBM := Zoomer(hDC, hBM, nW, nH, znW, znH)
If sFile = 0
SetClipboardData(hBM)
Else Convert(hBM, sFile)
DllCall("DeleteObject", "Uint", hBM)
DllCall("ReleaseDC", "Uint", 0, "Uint", hDC)
}


CaptureCursor(hDC, nL, nT)
{
VarSetCapacity(mi, 20, 0)
mi := Chr(20)
DllCall("GetCursorInfo", "Uint", &mi)
bShow   := NumGet(mi, 4)
hCursor := NumGet(mi, 8)
xCursor := NumGet(mi,12)
yCursor := NumGet(mi,16)


VarSetCapacity(ni, 20, 0)
DllCall("GetIconInfo", "Uint", hCursor, "Uint", &ni)
xHotspot := NumGet(ni, 4)
yHotspot := NumGet(ni, 8)
hBMMask  := NumGet(ni,12)
hBMColor := NumGet(ni,16)


If bShow
DllCall("DrawIcon", "Uint", hDC, "int", xCursor - xHotspot - nL, "int", yCursor - yHotspot - nT, "Uint", hCursor)
If hBMMask
DllCall("DeleteObject", "Uint", hBMMask)
If hBMColor
DllCall("DeleteObject", "Uint", hBMColor)
}


Zoomer(hDC, hBM, nW, nH, znW, znH)
{
mDC1 := DllCall("CreateCompatibleDC", "Uint", hDC)
mDC2 := DllCall("CreateCompatibleDC", "Uint", hDC)
zhBM := DllCall("CreateCompatibleBitmap", "Uint", hDC, "int", znW, "int", znH)
oBM1 := DllCall("SelectObject", "Uint", mDC1, "Uint",  hBM)
oBM2 := DllCall("SelectObject", "Uint", mDC2, "Uint", zhBM)
DllCall("SetStretchBltMode", "Uint", mDC2, "int", 4)
DllCall("StretchBlt", "Uint", mDC2, "int", 0, "int", 0, "int", znW, "int", znH, "Uint", mDC1, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", 0x00CC0020)
DllCall("SelectObject", "Uint", mDC1, "Uint", oBM1)
DllCall("SelectObject", "Uint", mDC2, "Uint", oBM2)
DllCall("DeleteDC", "Uint", mDC1)
DllCall("DeleteDC", "Uint", mDC2)
DllCall("DeleteObject", "Uint", hBM)
Return zhBM
}


Convert(sFileFr = "", sFileTo = "")
{
If !sFileTo
sFileTo := %imagesavename%
SplitPath, sFileTo, , , sExtTo
hGdiPlus := DllCall("LoadLibrary", "str", "gdiplus.dll")
VarSetCapacity(si, 16, 0), si := Chr(1)
DllCall("gdiplus\GdiplusStartup", "UintP", pToken, "Uint", &si, "Uint", 0)
DllCall("gdiplus\GdipGetImageEncodersSize", "UintP", nCount, "UintP", nSize)
VarSetCapacity(ci, nSize)
DllCall("gdiplus\GdipGetImageEncoders", "Uint", nCount, "Uint", nSize, "Uint", &ci)


Loop, %nCount%
{
If !InStr(Ansi4Unicode(NumGet(ci, 76 * (A_Index - 1) + 44)), "." . sExtTo)
Continue
pCodec := &ci + 76 * (A_Index - 1)
Break
}


If !sFileFr
{
DllCall("OpenClipboard", "Uint", 0)
If DllCall("IsClipboardFormatAvailable", "Uint", 2) && (hBM:=DllCall("GetClipboardData", "Uint", 2))
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", hBM, "Uint", 0, "UintP", pImage)
DllCall("CloseClipboard")
}
Else If sFileFr Is Integer
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", sFileFr, "Uint", 0, "UintP", pImage)
Else DllCall("gdiplus\GdipLoadImageFromFile", "Uint", Unicode4Ansi(wFileFr,sFileFr), "UintP", pImage)


If pImage
DllCall("gdiplus\GdipSaveImageToFile", "Uint", pImage, "Uint", Unicode4Ansi(wFileTo,sFileTo), "Uint", pCodec, "Uint", 0), DllCall("gdiplus\GdipDisposeImage", "Uint", pImage)


DllCall("gdiplus\GdiplusShutdown" , "Uint", pToken)
DllCall("FreeLibrary", "Uint", hGdiPlus)
}


SetClipboardData(hMem, nFormat = 2)
{
DetectHiddenWindows, On
Process, Exist
WinGet, hAHK, ID, ahk_pid %ErrorLevel%
DllCall("OpenClipboard", "Uint", hAHK)
DllCall("EmptyClipboard")
DllCall("SetClipboardData", "Uint", nFormat, "Uint", hMem)
DllCall("CloseClipboard")
}


Unicode4Ansi(ByRef wString, sString)
{
nSize := DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", 0, "int", 0)
VarSetCapacity(wString, nSize * 2)
DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", &wString, "int", nSize)
Return &wString
}


Ansi4Unicode(pString)
{
nSize := DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "Uint", 0, "int",  0, "Uint", 0, "Uint", 0)
VarSetCapacity(sString, nSize)
DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "str", sString, "int", nSize, "Uint", 0, "Uint", 0)
Return sString
}




#space::
imagesavename=C:\test.bmp
; call the screencapture function
CaptureScreen(0,false,imagesavename)
Return


GuiClose:

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: car hacking dataset是指用于研究和分析汽车网络安全的数据集。随着汽车技术的发展,车辆越来越多地依赖于计算机系统和网络连接来提供各种功能和服务。然而,与之相应的风险也不可忽视,例如黑客攻击可能导致汽车系统的不安全和操纵。为了更好地了解这些风险,研究人员和安全专家需要大量的汽车网络安全数据来分析和评估现有系统的弱点和潜在攻击方法。 car hacking dataset通常包括了大量的实验数据和实验结果,这些数据是通过在车辆中安装传感器、采集网络通信数据以及执行安全测试等方法获得的。这些数据可以包含车辆的各种传感器数据,例如加速度计、GPS位置信息、车辆速度等,还可以包含车辆的网络通信数据、CAN总线数据等。同时,数据集还可能包含了一系列的安全测试结果,如针对车辆系统进行的攻击测试以及对系统漏洞和弱点的评估。 研究人员可以利用car hacking dataset来开展各种安全研究和分析工作。通过分析这些数据,可以发现汽车系统的潜在风险和安全漏洞,评估系统的安全性能,并提出相应的安全措施和解决方案。此外,car hacking dataset还可以用于开发和测试车辆网络安全的防御机制和安全工具。 总之,car hacking dataset是用于研究和分析汽车网络安全的重要资源,它提供了丰富的数据和实验结果,可以帮助研究人员深入了解汽车系统的安全性能和潜在风险,进而提供更好的安全保护措施。 ### 回答2: car hacking dataset是指用于研究和分析汽车网络安全的数据集。这些数据集是从真实的汽车系统收集而来,包含了各种汽车网络攻击的数据和信息。这些数据集的目的是为了提供给研究人员和安全专家一个可以进行分析和测试的平台,以便更好地理解和预防汽车网络安全漏洞。 car hacking dataset通常包含了来自汽车网络的各种数据,例如CAN总线、ECU通信、传感器数据等。这些数据通常经过匿名化处理,以保护隐私和安全。数据集中可能包含不同类型的攻击情景,如远程控制攻击、信息窃取攻击、篡改消息攻击等,以及与汽车网络安全相关的其他信息。 对于研究人员和安全专家来说,car hacking dataset是一种宝贵的资源。它们可以利用这些数据集进行攻击和防御技术的研究和实验。通过分析这些数据,研究人员可以深入了解汽车网络中存在的安全漏洞和威胁,并开发出更有效的防护措施。 此外,car hacking dataset还可以为汽车制造商和安全公司提供一个测试和验证汽车网络安全解决方案的平台。利用这些数据集,他们可以评估自己的系统和算法的安全性,并进行必要的改进。 总之,car hacking dataset是为研究人员、安全专家和汽车行业提供的一个重要资源,它们通过提供真实的汽车网络数据来支持对汽车网络安全的研究和改进。 ### 回答3: Car hacking dataset是指一个包含了与汽车网络安全相关数据的数据集。汽车的网络安全问题正在成为一个日益严重的问题,因此研究人员和汽车制造商需要收集相关数据来进行研究和分析,以提高汽车的网络安全性。 这个数据集可能包含了许多与汽车网络安全相关的数据,包括汽车中的电子控制单元(ECU)的通信记录、CAN总线数据、车载电话系统和导航系统的数据等等。这些数据可以包括传感器数据、通信数据、控制指令等。 通过分析这些数据,研究人员可以了解车辆系统中存在的潜在漏洞和安全隐患。例如,他们可以分析攻击者如何通过操纵汽车的控制指令来控制汽车的行驶方向、刹车和加速等功能。通过研究这些攻击技术,研究人员可以为汽车制造商提供改进汽车网络安全性的建议。 此外,这个数据集对于开发安全解决方案和测试工具也非常有用。研究人员可以利用这些数据来开发新的安全防护工具,以帮助汽车制造商预防潜在的网络攻击。同时,汽车制造商也可以使用这个数据集来测试他们的汽车网络安全性,以确保汽车系统不容易受到黑客攻击。 总的来说,Car hacking dataset是一个包含了与汽车网络安全相关数据的数据集,它对于研究汽车网络安全问题、开发安全解决方案和测试工具都非常有帮助。通过分析这些数据,我们可以提高汽车系统的网络安全性,确保乘客的安全和隐私。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值