[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖

逆Ascode加密算法

本帖最后由 老刘1号 于 2017-5-22 19:34 编辑

最近了解了下Crlf斑竹推荐的Ascode,感觉很有趣
Ascode就是利用可打印字符Ascii码与8086Asm的编码的相通、相同之处,实现纯文本编写小型汇编程序。
相关链接:http://www.bathome.net/thread-21208-1-1.html
于是我又突发奇想了,Ascode是将汇编转化为Ascii可打印字符来实现执行,为什么不能将Ascii可打印字符转化为汇编代码来进行加密、编码呢?
于是有了下面的代码(已经添加到CSDN——Code区的项目里):
  1. @echo off
  2. REM 老刘研发-逆Ascode加密算法
  3. IF /i "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" (
  4. echo DEBUG和8086_ASM不支持64位的系统。
  5. Pause&Exit
  6. )
  7. set inputstr=
  8. set /p inputstr=输入任意非中文、全角字符的字符串(最大70位):
  9. %得到字符长度%
  10. Set "str=%inputstr%"
  11. :countchar
  12. if not "%inputstr%"=="" (
  13. set /a strlen+=1
  14. set inputstr=%inputstr:~1%
  15. goto :countchar
  16. )
  17. If "%strlen%" NEQ "" set /a strlen-=1 %预操作%
  18. if "%strlen%" EQU "" "%~0" %错误判断1%
  19. if %strlen% GTR 69 "%~0" %错误判断2%
  20. Set REM=REM
  21. if %strlen% GTR 16 Set REM=
  22. %Rem% Set /a lenTmp1=strlen/16
  23. %Rem% set /a lenTmp2=strlen%%16
  24. %Rem% Set /a strlen=lenTmp2
  25. %转Hex%
  26. set strlen=%strlen:10=A%
  27. set strlen=%strlen:11=B%
  28. set strlen=%strlen:12=C%
  29. set strlen=%strlen:13=D%
  30. set strlen=%strlen:14=E%
  31. set strlen=%strlen:15=F%
  32. %Rem% set strlen=%lenTmp1%%strlen%
  33. Set /A Num=0x%strlen%+1
  34. %算法核心%
  35. >%TMP%\Encode.Tmp (
  36. Echo Ascode Build By Old Liu StrLong=%Num%^(%strlen%H^)
  37. For /f "tokens=3,*" %%a in ('^(ECHO E 20:0 "%str%"^&ECHO U 20:0 %strlen%^&Echo Q^)^|DEBUG^|Findstr /R "[0-9A-F][0-9A-F][0-9A-F][0-9A-F]:[0-9A-F][0-9A-F][0-9A-F][0-9A-F]"') do ^
  38. Echo %%a %%b)
  39. START "" NOTEPAD %TMP%\Encode.Tmp
复制代码
注:不要试图运行汇编代码,它们有可能会破坏你的电脑!
帖子先留着,明天更新解密方法:lol
老刘的小站:http://lbcpc.3vcm.net

来道解密吊下胃口:
  1. --------DeAscode---------Build_By_Old_Liu----------StrLong:D-------------
  2. DEC AX
  3. DB 6F
  4. DB 6C
  5. DB 6C
  6. DB 6F
  7. AND [BX+6F],DL
  8. JB 0076
  9. DB 64
  10. AND [BX+DI],SP
  11. AND [BX+SI],AX
复制代码
1

评分人数

老刘的小站:http://lbcpc.3vcm.net

TOP

再来一道:
  1. --------DeAscode---------Build_By_Old_Liu----------StrLong:34-------------
  2. XOR BP,[3431]
  3. XOR [DI],SI
  4. CMP [BP+SI],SI
  5. SS:
  6. XOR AX,3533
  7. CMP [BX+DI],BH
  8. AAA
  9. CMP [BP+DI],SI
  10. XOR DH,[BP+DI]
  11. CMP [SI],DH
  12. SS:
  13. XOR DH,[3334]
  14. XOR DI,[BX+SI]
  15. XOR SI,[BP+SI]
  16. AAA
  17. CMP [DI],SI
  18. XOR [BP+SI],DH
  19. CMP [BX+SI],BH
  20. XOR AL,31
  21. CMP [BX],SI
  22. XOR [3339],SI
  23. CMP [BX+DI],DI
  24. XOR SI,[BX]
  25. XOR AX,3031
  26. XOR AX,00FF
复制代码
老刘的小站:http://lbcpc.3vcm.net

TOP

老刘的小站:http://lbcpc.3vcm.net

TOP

由加密原理可知,此加密算法是完全可逆的
所以就有了解密~
方法有很多,在这里主要讲2种:
1、人脑解密(要求:精通8086、Ascii表倒背如流、非常闲)
像Crlf斑竹这样精通8086又AScii倒背如流的人物可以直接盯着看
在大脑里将汇编指令转换为二进制或Hex,然后将其转换为对应的可打印字符即可。
老刘的小站:http://lbcpc.3vcm.net

TOP

本帖最后由 老刘1号 于 2017-3-12 18:59 编辑

2、DEBUG解密(要求:电脑32位或者有Dosbox和DEBUG、会用鼠标、会复制粘贴、有初中语文水平:D )
首先复制代码,建议从第二行开始复制
开始运行-输入DEBUG

执行8086Asm指令写入(输入A 20:0·即”一段安全的内存空间“)
然后找到CMD左上角的图标,点击-编辑-粘贴
然后看到刷刷刷电脑就帮你把Asm打好了,再回车一下

现在只需输入指令查看物理内存200的内容就可以了
键入D 0:200(8086中地址有多种表示方法)

这样就得到了解密后的字符串,居然是Hollo World!神奇吧~
欢迎大家手动解一下另一段加密!
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
老刘的小站:http://lbcpc.3vcm.net

TOP

本帖最后由 老刘1号 于 2017-3-9 21:27 编辑

看到这里,如果你已经会使用加密和解密,那么恭喜你已经掌握了一种加解密方法,解密甚至不需要安装其他任何软件(64位别扔我西红柿啊~可以试试第一种解密方法或者下载个DOSBOX和DEBUG~)
你可以将其应用于密码的储存和其他重要信息的加密
老刘的小站:http://lbcpc.3vcm.net

TOP

本帖最后由 老刘1号 于 2017-5-13 18:30 编辑

更新解密工具
已知BUG:英文感叹号会被丢弃
  1. @echo off
  2. REM 老刘研发-逆Ascode解密算法
  3. IF /i "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" (
  4. echo DEBUG和8086_ASM不支持64位的系统。
  5. Pause&Exit
  6. )
  7. TITLE 逆Ascode解密算法
  8. Echo 输入代码-【Ctrl+Z】+【回车】结束键入
  9. Echo ——————————————————————————————————
  10. Copy /Y CON %Tmp%\Code.tmp 1>nul 2>nul
  11. Set<%Tmp%\Code.tmp /p head=
  12. For /f "tokens=2 delims=()" %%a in ("%Head%") do Set Strlong=%%a
  13. Set Strlong=%Strlong:~,-1%
  14. Setlocal ENABLEDELAYEDEXPANSION
  15. For /F "Tokens=2,* DELIMS=: " %%a in ('^(Echo A20:0^&More +1 %Tmp%\Code.tmp^&Echo.^&Echo D20:0 %Strlong%^&Echo Q^)^|DEBUG^|FINDSTR /R "[0-9A-F][0-9A-F][0-9A-F][0-9A-F]:[0-9A-F][0-9A-F][0-9A-F][0-9A-F]"') DO (
  16. IF "!Exist!" NEQ "TRUE" (
  17. IF "%%a" EQU "0000" Set /a i+=1
  18. IF "!i!" EQU "2" Set "Exist=TRUE" & Call :ECHO "%%b"
  19. ) ELSE Call :ECHO "%%b"
  20. )
  21. ECHO.&Pause&Exit
  22. :Echo
  23. Set "text=%~1"
  24. <nul Set/p=!text:~50!
  25. Goto :Eof
复制代码
老刘的小站:http://lbcpc.3vcm.net

TOP

返回列表