public Hook(string FunctionName, int Parameters, DelimiterOptions DelimiterOption) { this.FunctionName = FunctionName; ReplacementName = "Hook_" + _md5.ComputeHash(FunctionName) + Parameters; var d = new Delimiters(DelimiterOption); this.StartDelimiter = d.StartDelimiter; this.EndDelimiter = d.EndDelimiter; StringBuilder funcParams = new StringBuilder(); StringBuilder echoes = new StringBuilder(); string fileOpen = "$f = fopen($_SERVER['DOCUMENT_ROOT'] . '/" + TraceFile + "', 'a') or die('error opening trace file');\r\n", fileClose = "fclose($f);\r\n"; string callInfoStart = new string('-', 32) + "Start\\n", callInfoEnd = new string('-', 32) + "End\\n"; string startEcho = "fwrite($f, \"" + callInfoStart + "\");\r\n", endEcho = "fwrite($f, \"" + callInfoEnd + "\");\r\n"; for (int i = 0; i < Parameters; i++) { string paramName = "$Param" + i.ToString(); echoes.AppendLine("fwrite($f, '" + paramName + ": '." + paramName + ".\"\\n\");"); funcParams.Append((funcParams.Length != 0 ? "," : "") + paramName); } ReplacementFunction = DelimiterOption == DelimiterOptions.Parentheses ? "function " + ReplacementName + "(" + funcParams + ")\r\n{\r\n" + fileOpen + startEcho + "fwrite($f, \"Function Called: " + FunctionName + "\\n\");\r\n" + echoes.ToString() + endEcho + fileClose + "return " + FunctionName + StartDelimiter + funcParams + EndDelimiter + ";\r\n}\r\n" : "function " + ReplacementName + "(" + funcParams + ")\r\n{\r\n" + fileOpen + startEcho + "fwrite($f, \"Function Called: \\" + FunctionName + "\\n\");\r\n" + echoes.ToString() + "fwrite($f, \"Value: \");\r\n" + //"$e=var_export(" + FunctionName + "[$Param0]);fwrite($f, $e);\r\n" + "if (isset(" + FunctionName + "[$Param0])) { fwrite($f, is_array(" + FunctionName + "[$Param0]) ? " + "implode(',', " + FunctionName + "[$Param0]) : " + FunctionName + "[$Param0]); }\r\n" + "fwrite($f, \"\\n\");\r\n" + endEcho + fileClose + "return $Param0;\r\n}\r\n"; if (DelimiterOption == DelimiterOptions.None) ReplacementFunction = ""; }
public Hook(string FunctionName, int Parameters, DelimiterOptions DelimiterOption) { this.FunctionName = FunctionName; ReplacementName = "Hook_" + _md5.ComputeHash(FunctionName) + Parameters; var d = new Delimiters(DelimiterOption); this.StartDelimiter = d.StartDelimiter; this.EndDelimiter = d.EndDelimiter; StringBuilder funcParams = new StringBuilder(); StringBuilder echoes = new StringBuilder(); string fileOpen = "$f = fopen($_SERVER['DOCUMENT_ROOT'] . '/" + TraceFile + "', 'a') or die('error opening trace file');\r\n", fileClose = "fclose($f);\r\n"; string callInfoStart = new string('-', 32) + "Start\\n", callInfoEnd = new string('-', 32) + "End\\n"; string startEcho = "fwrite($f, \"" + callInfoStart + "\");\r\n", endEcho = "fwrite($f, \"" + callInfoEnd + "\");\r\n"; for (int i = 0; i < Parameters; i++) { string paramName = "$Param" + i.ToString(); echoes.AppendLine("fwrite($f, '" + paramName + ": '." + paramName + ".\"\\n\");"); funcParams.Append((funcParams.Length != 0 ? "," : "") + paramName); } ReplacementFunction = DelimiterOption == DelimiterOptions.Parentheses ? "function " + ReplacementName + "(" + funcParams + ")\r\n{\r\n" + fileOpen + startEcho + "fwrite($f, \"Function Called: " + FunctionName + "\\n\");\r\n" + echoes.ToString() + endEcho + fileClose + "return " + FunctionName + StartDelimiter + funcParams + EndDelimiter + ";\r\n}\r\n" : "function " + ReplacementName + "(" + funcParams + ")\r\n{\r\n" + fileOpen + startEcho + "fwrite($f, \"Function Called: \\" + FunctionName + "\\n\");\r\n" + echoes.ToString() + "fwrite($f, \"Value: \");\r\n" + //"$e=var_export(" + FunctionName + "[$Param0]);fwrite($f, $e);\r\n" + "if (isset(" + FunctionName + "[$Param0])) { fwrite($f, is_array(" + FunctionName + "[$Param0]) ? " + "implode(',', " + FunctionName + "[$Param0]) : " + FunctionName + "[$Param0]); }\r\n" + "fwrite($f, \"\\n\");\r\n" + endEcho + fileClose + "return $Param0;\r\n}\r\n"; if (DelimiterOption == DelimiterOptions.None) { ReplacementFunction = ""; } }