<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    &gt;&nbsp; You could, but this is not how security evolves ;)
    <br>
    <br>
    xD I know. But for now, a quick and dirty hack is better than half a
    year of work.<br>
    <br>
    Looking at:<br>
    mono/metadata/loader.c:mono_lookup_pinvoke_call<br>
    <br>
    <br>
    I just wanted to say, that looking at the source file, this line
    hurt my eye:<br>
    <small>
      if (strstr (new_scope, ".dll") == (new_scope + strlen (new_scope)
      - 4)) {</small><br>
    <br>
    If you want to check whether new_scope ends on ".dll", I wouldn't do
    a strstr.<br>
    <br>
    I did this one in an aimbot of mine, like this:<br>
    if ( (urth_aimAtHead.integer != 0) )<br>
    &nbsp;&nbsp;&nbsp;&nbsp; bHeadInModel= (strstr(modelName, "head")) || (strstr(modelName,
    "helmet")) ;<br>
    <br>
    and when I started the program with this modification (as opposed to
    without this modification), you just heard the fan start going
    (every time), as well as a very obvious CPU-performance related
    lagging. <br>
    <br>
    I realized I could replace strstr when i just took the ending of the
    full model name, added a strrcmp instead of strstr. So
    strstr(modelName, "head") became !strrcmp(modelName, "head.md3")<br>
    And my performance problems were gone, and the fan stopped
    immediately.<br>
    <br>
    This is the strrcmp function I used (origining from BSD libc
    extensions, BSD license):<br>
    <br>
    bool strrcmp(char* chrptr_SearchIn, char* chrptr_SearchFor)<br>
    {<br>
    &nbsp;&nbsp;&nbsp; size_t szeSearchInLength&nbsp; = strlen(chrptr_SearchIn) ;<br>
    &nbsp;&nbsp;&nbsp; size_t szeSearchForLength = strlen(chrptr_SearchFor) ;<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; if (szeSearchForLength &gt; szeSearchInLength)<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false ;&nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
    &nbsp;&nbsp;&nbsp; if (memcmp(chrptr_SearchIn + szeSearchInLength -
    szeSearchForLength, chrptr_SearchFor, szeSearchForLength))<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false ;<br>
    &nbsp;&nbsp;&nbsp; else<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true ;<br>
    }<br>
    <br>
    <br>
    <br>
    <br>
    <br>
    <br>
    On 09/02/2011 06:05 PM, Robert Jordan wrote:
    <blockquote cite="mid:j3qusk$aue$1@dough.gmane.org" type="cite">On
      02.09.2011 17:29, quandary82 wrote:
      <blockquote type="cite">Couldn't I hack together my own custom
        mono-runtime version, to block
        DllImport for all dll's that are not in an allowed-dlls list and
        System.Diagnostics.Process.Start as well ?
      </blockquote>
      You could, but this is not how security evolves ;)
      <blockquote type="cite">System.Diagnosts.Process would be in the
        mcs class library, but where is
      </blockquote>
      Starting processes can be prevented with SELinux or AppArmor.
      <blockquote type="cite">DllImport ?
        Is it just an attribute ?
        I suppose there is a wrapper around dlopen/LoadLibrary somewhere
        ?
      </blockquote>
      DllImport is special.
      A good place to block p/invokes is:
      mono/metadata/loader.c:mono_lookup_pinvoke_call
      There you can look from which assemblies the pinvoke comes from
      etc.
      Robert
      _______________________________________________
      Mono-devel-list mailing list
      <a class="moz-txt-link-abbreviated" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a>
      <a class="moz-txt-link-freetext" href="http://lists.ximian.com/mailman/listinfo/mono-devel-list">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a>
      <br>
    </blockquote>
    <br>
  </body>
</html>