整合后台服务和驱动代码注入

Home键的驱动代码:
/dev/input/event1: 0001 0066 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0066 00000000
/dev/input/event1: 0000 0000 00000000
 
对应输入的驱动代码:
sendevent/dev/input/event1 0 0 0
sendevent/dev/input/event1 1 102 1
sendevent/dev/input/event1 0 0 0
sendevent/dev/input/event1 1 102 0
sendevent/dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0
 
从主页点击QQ图标启动QQ的驱动代码:
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000053
/dev/input/event4: 0003 0036 00000394
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000052
/dev/input/event4: 0003 0036 00000394
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000052
/dev/input/event4: 0003 0036 00000394
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0001 014a 00000000
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
对应输入的驱动代码:
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 1
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 83
sendevent/dev/input/event4 3 54 916
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 82
sendevent/dev/input/event4 3 54 916
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 82
sendevent/dev/input/event4 3 54 916
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 0
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 0 0 0
 
输入的驱动代码优化:
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 83
sendevent /dev/input/event4 3 54 916
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
 
在弹出的输入法上点击字母n
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000205
/dev/input/event4: 0003 0036 00000463
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0001 014a 00000000
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
对应输入的驱动代码:
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 1
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 517
sendevent/dev/input/event4 3 54 1123
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 517
sendevent/dev/input/event4 3 54 1123
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 517
sendevent/dev/input/event4 3 54 1123
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 0
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 0 0 0
 
优化后的驱动输入代码:
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 1330 1
sendevent /dev/input/event4 353 517
sendevent /dev/input/event4 354 1123
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 1330 0
sendevent /dev/input/event4 00 0
sendevent /dev/input/event4 00 0
 
点击发送按钮
/dev/input/event4: 0001 014a 00000001
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000291
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0030 00000001
/dev/input/event4: 0003 0035 00000292
/dev/input/event4: 0003 0036 0000027f
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0001 014a 00000000
/dev/input/event4: 0000 0002 00000000
/dev/input/event4: 0000 0000 00000000
 
对应输入的驱动代码:
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 1
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 658
sendevent/dev/input/event4 3 54 639
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 657
sendevent/dev/input/event4 3 54 639
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 658
sendevent/dev/input/event4 3 54 639
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 3 48 1
sendevent/dev/input/event4 3 53 658
sendevent/dev/input/event4 3 54 639
sendevent/dev/input/event4 0 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 1 330 0
sendevent /dev/input/event40 2 0
sendevent/dev/input/event4 0 0 0
sendevent/dev/input/event4 0 0 0
 
优化后的驱动输入代码:
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 658
sendevent /dev/input/event4 3 54 639
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
 
 
所以整套动作如下:
1、按下Home键,让手机界面回到系统主页
Home键对应输入的驱动代码:
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0
 
2、从主页点击QQ图标启动QQ
驱动代码
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 83
sendevent /dev/input/event4 3 54 916
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
 
3、在弹出的输入法上点击字母n
驱动代码
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 517
sendevent /dev/input/event4 3 54 1123
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
 
4、点击发送按钮
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 1
sendevent /dev/input/event4 3 53 658
sendevent /dev/input/event4 3 54 639
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 1 330 0
sendevent /dev/input/event4 0 0 0
sendevent /dev/input/event4 0 0 0
 
5、按下Home键,让手机界面回到系统主页
Home键对应输入的驱动代码:
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 102 0
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 0 0 0

实现的效果如下:就是从我的手机qq给通过我的设备发送一个字母n

这是发送界面

这是接受界面

上面的步骤是怎么获取指令的动作,下面描述的这个例子是我从手机主页打开QQ,然后从搜索列表中找出我的某个好友,然后给他发送消息“你好”,然后返回主页面。

当然,整套系统不能连续做,中间要有停顿,否则有的时候系统还没有把响应动作做完,下一个动作又开始了,导致动作出错。可以在代码里用sleep函数控制等待的时间。整套动作在PC上用终端演示完全没有问题,下一步就可以在手机上实现了。

具体的在代码里的实现:

第一步:在我前两篇博客里的有个关于Android服务的例子,名字叫Servic.zip,在这个例子里加入了一个动作列表的类,用来保存动作指令,就是上面的指令序列。

第二步:将我上一篇博客里用按钮来注入代码的响应函数doXue()重新封装一下,放服务的类里面,我把参数换成了String数组,每次传一个动作的指令数组过去,然后用sleep控制等待时间。比如,启动QQ时间会比较长,我就设置成等待5秒再继续执行下一个动作。

好了,核心代码如下:

指令类:从这个类的定义里面可以清楚的看到每个步骤了 ,我就不多解释每个数组里面的指令的功能了,都写在注释里了。

[java] view plaincopy
  1. public class OrderList {
  2. //1---Home键对应输入的驱动代码
  3. static String[] orderHome1 = {
  4. "sendevent /dev/input/event1 0 0 0",
  5. "sendevent /dev/input/event1 1 102 1",
  6. "sendevent /dev/input/event1 0 0 0",
  7. "sendevent /dev/input/event1 1 102 0",
  8. "sendevent /dev/input/event1 0 0 0",
  9. "sendevent /dev/input/event1 0 0 0"
  10. };
  11. //2---从主页点击QQ图标启动QQ的驱动代码
  12. static String[] orderQQ2  = {
  13. "sendevent /dev/input/event4 0 0 0",
  14. "sendevent /dev/input/event4 1 330 1",
  15. "sendevent /dev/input/event4 3 53 83",
  16. "sendevent /dev/input/event4 3 54 916",
  17. "sendevent /dev/input/event4 0 0 0",
  18. "sendevent /dev/input/event4 1 330 0",
  19. "sendevent /dev/input/event4 0 0 0",
  20. "sendevent /dev/input/event4 0 0 0"
  21. };
  22. //3---在弹出的QQ界面上点击搜索
  23. static String[] orderSearch3  = {
  24. "sendevent /dev/input/event4 0 0 0",
  25. "sendevent /dev/input/event4 1 330 1",
  26. "sendevent /dev/input/event4 3 53 363",
  27. "sendevent /dev/input/event4 3 54 194",
  28. "sendevent /dev/input/event4 0 0 0",
  29. "sendevent /dev/input/event4 1 330 0",
  30. "sendevent /dev/input/event4 0 0 0",
  31. "sendevent /dev/input/event4 0 0 0"
  32. };
  33. //4---输入hyl 选择何一柳 前提是输入法是中文输入模式
  34. static String[] orderInput4  = {
  35. "sendevent /dev/input/event4 0 0 0",
  36. "sendevent /dev/input/event4 1 330 1",
  37. "sendevent /dev/input/event4 3 53 219",
  38. "sendevent /dev/input/event4 3 54 1014",
  39. "sendevent /dev/input/event4 0 0 0",
  40. "sendevent /dev/input/event4 1 330 0",
  41. "sendevent /dev/input/event4 0 0 0",
  42. "sendevent /dev/input/event4 1 330 1",
  43. "sendevent /dev/input/event4 3 53 530",
  44. "sendevent /dev/input/event4 3 54 1127",
  45. "sendevent /dev/input/event4 0 0 0",
  46. "sendevent /dev/input/event4 1 330 0",
  47. "sendevent /dev/input/event4 0 0 0",
  48. "sendevent /dev/input/event4 1 330 1",
  49. "sendevent /dev/input/event4 3 53 367",
  50. "sendevent /dev/input/event4 3 54 1003",
  51. "sendevent /dev/input/event4 0 0 0",
  52. "sendevent /dev/input/event4 1 330 0",
  53. "sendevent /dev/input/event4 0 0 0",
  54. "sendevent /dev/input/event4 1 330 1",
  55. "sendevent /dev/input/event4 3 53 130",
  56. "sendevent /dev/input/event4 3 54 768",
  57. "sendevent /dev/input/event4 0 0 0",
  58. "sendevent /dev/input/event4 1 330 0",
  59. "sendevent /dev/input/event4 0 0 0",
  60. "sendevent /dev/input/event4 0 0 0"
  61. };
  62. //5---从搜索结果中选择何一柳
  63. static String[] orderSelect5  = {
  64. "sendevent /dev/input/event4 0 0 0",
  65. "sendevent /dev/input/event4 1 330 1",
  66. "sendevent /dev/input/event4 3 53 438",
  67. "sendevent /dev/input/event4 3 54 223",
  68. "sendevent /dev/input/event4 0 0 0",
  69. "sendevent /dev/input/event4 1 330 0",
  70. "sendevent /dev/input/event4 0 0 0"
  71. };
  72. //6---点击输入框 弹出输入法
  73. static String[] orderGetInput6  = {
  74. "sendevent /dev/input/event4 0 0 0",
  75. "sendevent /dev/input/event4 1 330 1",
  76. "sendevent /dev/input/event4 3 53 412",
  77. "sendevent /dev/input/event4 3 54 1233",
  78. "sendevent /dev/input/event4 0 0 0",
  79. "sendevent /dev/input/event4 1 330 0",
  80. "sendevent /dev/input/event4 0 0 0",
  81. "sendevent /dev/input/event4 0 0 0"
  82. };
  83. //7---从输入法打字 输入 你好 四个字
  84. static String[] orderInputText7  = {
  85. "sendevent /dev/input/event4 0 0 0",
  86. "sendevent /dev/input/event4 1 330 1",
  87. "sendevent /dev/input/event4 3 53 524",
  88. "sendevent /dev/input/event4 3 54 1020",
  89. "sendevent /dev/input/event4 0 0 0",
  90. "sendevent /dev/input/event4 1 330 0",
  91. "sendevent /dev/input/event4 0 0 0",
  92. "sendevent /dev/input/event4 1 330 1",
  93. "sendevent /dev/input/event4 3 53 222",
  94. "sendevent /dev/input/event4 3 54 1006",
  95. "sendevent /dev/input/event4 0 0 0",
  96. "sendevent /dev/input/event4 3 53 221",
  97. "sendevent /dev/input/event4 3 54 1006",
  98. "sendevent /dev/input/event4 1 330 0",
  99. "sendevent /dev/input/event4 0 0 0",
  100. "sendevent /dev/input/event4 1 330 1",
  101. "sendevent /dev/input/event4 3 53 209",
  102. "sendevent /dev/input/event4 3 54 1009",
  103. "sendevent /dev/input/event4 0 0 0",
  104. "sendevent /dev/input/event4 1 330 0",
  105. "sendevent /dev/input/event4 0 0 0",
  106. "sendevent /dev/input/event4 1 330 1",
  107. "sendevent /dev/input/event4 3 53 350",
  108. "sendevent /dev/input/event4 3 54 903",
  109. "sendevent /dev/input/event4 0 0 0",
  110. "sendevent /dev/input/event4 1 330 0",
  111. "sendevent /dev/input/event4 0 0 0",
  112. "sendevent /dev/input/event4 1 330 1",
  113. "sendevent /dev/input/event4 3 53 521",
  114. "sendevent /dev/input/event4 3 54 992",
  115. "sendevent /dev/input/event4 0 0 0",
  116. "sendevent /dev/input/event4 1 330 0",
  117. "sendevent /dev/input/event4 0 0 0",
  118. "sendevent /dev/input/event4 1 330 1",
  119. "sendevent /dev/input/event4 3 53 115",
  120. "sendevent /dev/input/event4 3 54 762",
  121. "sendevent /dev/input/event4 0 0 0",
  122. "sendevent /dev/input/event4 1 330 0",
  123. "sendevent /dev/input/event4 0 0 0",
  124. "sendevent /dev/input/event4 0 0 0"
  125. };
  126. //8---点击发送按钮代码
  127. static String[] orderInputSend8  = {
  128. "sendevent /dev/input/event4 0 0 0",
  129. "sendevent /dev/input/event4 1 330 1",
  130. "sendevent /dev/input/event4 3 53 658",
  131. "sendevent /dev/input/event4 3 54 639",
  132. "sendevent /dev/input/event4 0 0 0",
  133. "sendevent /dev/input/event4 1 330 0",
  134. "sendevent /dev/input/event4 0 0 0",
  135. "sendevent /dev/input/event4 0 0 0"
  136. };
  137. }

实际执行这些指令的函数doXue(String[] orders)

[java] view plaincopy
  1. //指令执行函数
  2. void doXue(String[] orders){
  3. Log.i(TAG, "doXue-----------------");
  4. Runtime runtime = Runtime.getRuntime();
  5. DataOutputStream dataOut;
  6. try {
  7. Process process = runtime.exec("su ");
  8. InputStream in = process.getInputStream();
  9. BufferedReader bufferReader = new BufferedReader(
  10. new InputStreamReader(in));
  11. BufferedReader err=new BufferedReader(new InputStreamReader(process.getErrorStream()));
  12. String line = null;
  13. dataOut = new DataOutputStream(process.getOutputStream());
  14. //点击发送按钮
  15. for(String order : orders){
  16. dataOut.writeBytes(order + ";");
  17. }
  18. dataOut.flush();
  19. dataOut.close();
  20. process.waitFor();
  21. while ((line = err.readLine()) != null) {
  22. Log.i(TAG,line);
  23. }
  24. while ((line = bufferReader.readLine()) != null) {
  25. Log.i(TAG,line);
  26. }
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. Log.i(TAG,e.getMessage());
  30. }finally{
  31. }
  32. }

最后是调用这个注入驱动代码的服务的代码:

[java] view plaincopy
  1. @Override
  2. public void onCreate() {
  3. // TODO Auto-generated method stub
  4. Log.i(TAG, "Service-----------------created");
  5. super.onCreate();
  6. Thread thread = new Thread() {
  7. @Override
  8. public void run() {
  9. Log.i(TAG, "Service-----------------");
  10. try {
  11. Log.i(TAG, "Service-----------------orderHome1");
  12. doXue(OrderList.orderHome1);
  13. Thread.sleep(1000 * 2);
  14. Log.i(TAG, "Service-----------------orderHome1");
  15. doXue(OrderList.orderHome1);
  16. Thread.sleep(1000 * 2);
  17. Log.i(TAG, "Service-----------------orderQQ2");
  18. doXue(OrderList.orderQQ2);
  19. Thread.sleep(1000 * 5); //启动QQ时间设置稍微长一点
  20. Log.i(TAG, "Service-----------------orderSearch3");
  21. doXue(OrderList.orderSearch3);
  22. Thread.sleep(1000 * 2);
  23. Log.i(TAG, "Service-----------------orderInput4");
  24. doXue(OrderList.orderInput4);
  25. Thread.sleep(1000 * 2);
  26. Log.i(TAG, "Service-----------------orderSelect5");
  27. doXue(OrderList.orderSelect5);
  28. Thread.sleep(1000 * 2);
  29. Log.i(TAG, "Service-----------------orderGetInput6");
  30. doXue(OrderList.orderGetInput6);
  31. Thread.sleep(1000 * 2);
  32. Log.i(TAG, "Service-----------------orderInputText7");
  33. doXue(OrderList.orderInputText7);
  34. Thread.sleep(1000 * 2);
  35. Log.i(TAG, "Service-----------------orderInputSend8");
  36. doXue(OrderList.orderInputSend8);
  37. Thread.sleep(1000 * 2);
  38. doXue(OrderList.orderHome1);
  39. } catch (InterruptedException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. }
  43. }
  44. };
  45. thread.start();
  46. }

最后就是启动服务了,这个代码就不贴了,网上很多,之前的例子里面也有。这个demo的最终效果就是,打开这个app以后,点击启动服务,然后程序会自动请求root权限,如果你的手机root过,或者有root权限管理工具的话,就选择授权,然后,手机会自动回到主页,然后打开QQ,然后搜索联系人,然后发消息,最后再次回到主页。

Demo的下载地址:不要积分。

http://download.csdn.net/detail/diaoliangwang/7402083

演示效果的gif

当然了,再次说明下,这种驱动代码不同类型不同款的手机是不同的,同款手机如果Rom不同可能也不同,上面的指令仅仅针对我自己的手机,所以如果你用上面的代码来测试你自己的手机的话,应该不会又效果,随便举个例子,我的QQ图标放在主页的那个位置,你的QQ不一定也在那个位置,再加上屏幕大小还不一样。

因此,后面我会继续改进,开始时候让用户自己在自己的手机上录制动作,程序获取手机的相关驱动代码,然后编制成一套动作就行了。

后面还需要优化的地方:

1、我在前一篇博客里自己写的驱动代码16进制转10进制转换工具还不够完善,没有去处重复的指令,比如系统模拟了同一个点的多次点击,这个完全可以过滤掉,还有一些没用的驱动代码也可以过滤掉。让输出的结果更加简洁,后面有时间我会继续优化上传。

2、目前demo的动作还不够连贯,需要自己编写代码,后面需要改成让程序自动录制用户的操作,这就涉及到另一个问题,怎么用服务从android后台拿到写入驱动里的程序,而不是从PC端去获取,让整个录制动作,到系统再次响应同一个动作连续在一起。

整合后台服务和驱动代码注入相关推荐

  1. android远程控制(三)----通过后台服务实现系统点击事件模拟

    整合后台服务和驱动代码注入 Home键的驱动代码: /dev/input/event1: 0001 0066 00000001 /dev/input/event1: 0000 0000 0000000 ...

  2. JavaScript脚本访问后台服务实例

    js访问后台服务实例 前端代码: function GetHeatMapFunc() {         var s_time = "2017-11-12";         va ...

  3. IBM整合管理服务:云时代驱动IT服务创新

    本文讲的是IBM整合管理服务:云时代驱动IT服务创新[IT168 专稿]日前,IBM全球信息科技服务部(GTS)在位于苏州工业园区的苏州国科数据中心举办IBM管理服务中心开业仪式.该整合管理服务中心坐 ...

  4. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(二)后台服务代码部分

    程序写太长了,大家看着也累,我也写着也很辛苦,接下来,还是写得简短一些,尽量多一些截图,少一些文字吧. 同样是,欢迎指点批评的同学,我虚心学习提高,改改以往的高姿态. 架设软件系统就像大家看饭店厨师炒 ...

  5. 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(二)后台服务代码部分...

    程序写太长了,大家看着也累,我也写着也很辛苦,接下来,还是写得简短一些,尽量多一些截图,少一些文字吧. 同样是,欢迎指点批评的同学,我虚心学习提高,改改以往的高姿态. 架设软件系统就像大家看饭店厨师炒 ...

  6. Spring-Cloud-Gateway之代码注入漏洞及解决

    目录 1. 背景 2. 漏洞简介 3. 原理 3. 1Spring-Cloud-Gateway的原理 3.1.1 核心流程 3.1.2 流程说明 3.1.3 常见的 API 网关实现方案主要有以下 6 ...

  7. win 2003 IIS如何防止代码注入

    网站经常给别人加了代码,好多人认为这是红色代码,不过也有一些是开放FSO权限,给别人注入,但通阅读本文希望对你有帮助. 什么是ARP? ARP(Addre***esolutionProtocol)地址 ...

  8. 程序员疫苗:代码注入

    几个月在我的微博上说过要建一个程序员疫苗网站,希望大家一起来提交一些错误示例的代码,来帮助我们新入行的程序员,不要让我们的程序员一代又一代的再重复地犯一些错误.很多程序上错误就像人类世界的病毒一样,我 ...

  9. Discuz!uc.key泄露导致代码注入漏洞uc.php的解决方法

    漏洞名称:Discuz uc.key泄露导致代码注入漏洞 漏洞描述:在Discuz中,uc_key是UC客户端与服务端通信的通信密钥,discuz中的/api/uc.php存在代码写入漏洞,导致黑客可 ...

最新文章

  1. 22岁复旦大学生拿下深度学习挑战赛冠军:明明可以靠脸吃饭,却偏偏要靠才华
  2. java constant 类_如何从Constant java为注释提供值
  3. 一个百亿级日志系统是怎么设计出来的?
  4. LeetCode 1009. 十进制整数的反码(位运算)
  5. Transformer 是万能的吗?
  6. c 文件操作_你电脑用久了,会有多少重复文件?快用它来整理一下吧
  7. ngnix的简单转发请求之server和location配置详解
  8. Silverlight 密码框 Focus
  9. CCF CSP202009-2 风险人群筛查
  10. 巧妙解决Windows 7系统中软件乱码问题
  11. .com才是顶级域名,baidu.com是二级域名
  12. PS使用:windows解决Adobe Photoshop 2020(PS2020)闪退
  13. java 基本语法 二_java基础语法2
  14. 创建数据库中,常用的MySQL命令(含解析与全部代码)
  15. 炼石:栉风沐雨七载路,不负韶华再出发
  16. PLC不用编程,以太网方式与多台智能仪表、变频器等串口设备通讯(基于智能网关)
  17. C++调用ffmpeg批量合并bilibili缓存视频
  18. 近视眼用什么台灯比较好?防近视眼护眼台灯排名
  19. 多次办理这项公积金业务都涉及到查询信用报告,是否会影响将来申请贷款?
  20. SQL语句--关于赋值

热门文章

  1. bugfix:MySQL内存使用率无限增长以及kill手法
  2. LeetCode 572. 另一个树的子树 思考分析
  3. flush python_带有示例的Python File flush()方法
  4. eval 函数 代替函数_eval()函数以及JavaScript中的示例
  5. linux内核测试,Linux内核测试的生命周期
  6. HTML5 学习笔记
  7. Oracle访问同义词连接超时,利用同义词解决oracle用户访问其它schema的对象
  8. python三大器_Python - 三大器 迭代器,生层器,装饰器
  9. linux之地址空间
  10. android文本复制自定义剪切板,android 剪切板-文本复制、粘贴